مشاهدة النسخة كاملة : كيف يتم تمثيل الخطوط على شكل 0 و 1؟
ALG2009
12-05-2010, 05:28 PM
السلام عليكم ورحمة الله وبركاته
ماهي الفكرة التي تتم بها برمجة برنامج عند كتابة حرف الباء مثلا بالخط Traditional Arabic على سبيل المثال يحوله إلى matrix عبارة على 0و1 هكذا
0000000000
0000000000
0100000010
0111111110
0000100000
0000000000
0000000000
0000000000
shagrouni
13-05-2010, 12:18 PM
السلام عليكم
إحدى الأفكار أن نقوم بطباعة الحرف بلون معين في صورة تكون خلفيتها بلون مخالف،
ثم قراءة الصورة نقطة نقطة (Pixel)، فالنقطة التي هي بلون الحرف تقرأ (1) و النقطة بلون الخلفية تقرأ (0).
المثال التالي يعبر عن الفكرة.
تكون لدينا شاشة = فورم بها :
1- Edit1 لنكتب فيه الأحرف المراد قراءتها
2 – Memo1 لعرض النتائج، ويستحسن أن كون الخط فيه من نوع Courier New
وأن تكون ألواح التحريك ظاهرة Memo1.ScrollBars = ssBoth
3- Button1 نضع في حدث الضغط عليه التعليمات التالية:
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
s: string;
sRow: string;
ARect: TRect;
X, Y: integer;
TextWidth, TextHeight: integer;
begin
s := Edit1.Text;
Memo1.Clear;
Bitmap := TBitmap.Create;
try
Bitmap.Canvas.Font.Assign(Edit1.Font);
TextWidth := Bitmap.Canvas.TextWidth(S);
TextHeight := Bitmap.Canvas.TextHeight(S);
ARect := Rect(0, 0, TextWidth - 1, TextHeight - 1);
Bitmap.Width := TextWidth;
Bitmap.Height := TextHeight;
Bitmap.Canvas.Brush.Color := 0;
Bitmap.Canvas.FillRect(ARect);
Bitmap.Canvas.Font.Color := clWhite;
Bitmap.Canvas.TextOut(0, 0, s);
for Y := 0 to ARect.Bottom do
begin
sRow := '';
for X := 0 to ARect.Right do
begin
if Bitmap.Canvas.Pixels[x, y] = 0 then
sRow := sRow + '.'
else
sRow := sRow + '#';
end;
Memo1.Lines.Add(sRow);
end;
finally
//Image1.Picture.Assign(Bitmap);
Bitmap.Free;
end;
end;
إذا أردنا رؤية محتويات الصورة التي رسمناها يمكن إدراج مكون Image1 وتخصيص الصورة له:
Image1.Picture.Assign(Bitmap);
ALG2009
13-05-2010, 08:18 PM
وعليكم السلام
جزاك الله خيرا أخي shagrouni سأحاول فهم الكود ولكن ماذا تقصد بعرض محتويات الصورة ؟
vBulletin® , Copyright ©2008-2012