16-09-2009, 12:48 AM
في البداية السلام عليكم
بالمرفقات تطبيق به بعض الدوال و الأكواد لمن يريد أخذ فكرة أولية على
Digital Image Processing
لمحة:
{Function To Take a ScreenShot Of The Desktop}
أخذ صورة لسطح المكتب
عملية الاستدعاء كالاتي:
{Procedure To Take a ScreenShot Of An Active Window}
أخذ صورة للنافذة الحية في سطح المكتب
عملية الاستدعاء كالاتي:
{ ***** Image without Blue Color ***** }
الحصول على صورة بدون الاعتماد على اللون الأزرق
{ ***** Image without Green Color ***** }
الحصول على صورة بدون الاعتماد على اللون الأخضر
{ ***** Image without Red Color ***** }
الحصول على صورة بدون الاعتماد على اللون الأحمر
;
{ ***** Obtain Flow Image ***** }
الحصول على صورة مشوشة
لمن يريد التعامل مع الصور يستحن أن يستعمل صور بصيغة *.bmp
تم ارفاق صورة لمن يريد التجربة مع الملفات
بالتوفيق للجميع
و السلام.
بالمرفقات تطبيق به بعض الدوال و الأكواد لمن يريد أخذ فكرة أولية على
Digital Image Processing
لمحة:
إقتباس :تعتبر الصورة مجموهة من Pixels
و كل Pixel تأخذ قيمة بين 0 و 255
أي بين اللون الأبيض و صولا الى الأسود
المجال بين القيمتين يمثل مجوعة الألوان الأخرى بمختلف أشكالها
نأتي الان الى الصور من ناحية النوعية
حيث هناك عدة أنواع من الصور منها BitMap Images
وهي التي يستعملها الجميع في الحياة اليومية
(الموجود في الهاتف الجوال و الجرائد و المصورة و التي بجهاز الحاسوب)
لكن منها ما هو ثنائي الأبعاد و منها ما هو ثلاثي الأبعاد
بصفة عامة من ناحية الألوان الصورة يمكن أن تكون:
تحمل لونين فقط أي أبيض أو أسود
تحمل مجموعة من الألوان و تكون الألوان في المجال الذي ذكرته سابقا أي بين 0 و 255
بالنسبة الى الصور بالألوان يتم دراستها مقارنة بثلاثة ألوان وهم
الأحمر Red
الأخضر Green
الأزرق Blue
و ذلك نظرا لكون كل لون هو خليط من لونين فأكثر و هذه الألون هي مصدر كل شيء
و لكون العين تحتاجها لتمييز بعض الأشياء منها الطبيعة أي اللون الأخضر
السماء اللون الأزرق و أشعة الشمس اللون الأحمر
{Function To Take a ScreenShot Of The Desktop}
أخذ صورة لسطح المكتب
كود :
function GetScreenShot: TBitmap;
var
Desktop: HDC;
begin
Result := TBitmap.Create;
Desktop := GetDC(0);
try
try
Result.PixelFormat := pf32bit;
Result.Width := Screen.Width;
Result.Height := Screen.Height;
BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);
Result.Modified := True;
finally
ReleaseDC(0, Desktop);
end;
except
Result.Free;
Result := nil;
end;
end;
عملية الاستدعاء كالاتي:
كود :
procedure TForm1.ScrShotBtnClick(Sender: TObject);
begin
Image1.Picture.Bitmap:= GetScreenShot;
end;
{Procedure To Take a ScreenShot Of An Active Window}
أخذ صورة للنافذة الحية في سطح المكتب
كود :
procedure ScreenShotActiveWindow(Bild: TBitMap; Val: Boolean);
var
c: TCanvas;
r, t: TRect;
h: THandle;
begin
c := TCanvas.Create;
c.Handle := GetWindowDC(GetDesktopWindow);
h := GetForeGroundWindow;
if h <> 0 then
GetWindowRect(h, t);
try
r := Rect(0, 0, t.Right - t.Left, t.Bottom - t.Top);
Bild.Width := t.Right - t.Left;
Bild.Height := t.Bottom - t.Top;
Bild.Canvas.CopyRect(r, c, t);
finally
ReleaseDC(0, c.Handle);
c.Free;
end;
end;
عملية الاستدعاء كالاتي:
كود :
procedure TForm1.WinCapBtnClick(Sender: TObject);
begin
ScreenShotActiveWindow(Image1.Picture.BitMap, Ok);
end;
{ ***** Image without Blue Color ***** }
الحصول على صورة بدون الاعتماد على اللون الأزرق
كود :
procedure TForm1.ImgWBBtnClick(Sender: TObject);
var
Z,X,bX,Y : Integer;
Ligne : PByteArray;
begin
for Z := 0 to Form1.Image1.Picture.Bitmap.Width - 1 do begin
for Y := 0 to Form1.Image1.Picture.Bitmap.Height - 1 do begin
Ligne := Image1.Picture.Bitmap.ScanLine[Y];
for X := 0 to Form1.Image1.Picture.Bitmap.Width -1 do begin
bX := X * 3;
Ligne[bX] := (Ligne[bX+3]);
end;
end;
Form1.Image1.Repaint;
end;
end;
{ ***** Image without Green Color ***** }
الحصول على صورة بدون الاعتماد على اللون الأخضر
كود :
procedure TForm1.ImgWGBtnClick(Sender: TObject);
var
Z,X,bX,Y : Integer;
Ligne : PByteArray;
begin
for Z := 0 to Form1.Image1.Picture.Bitmap.Width - 1 do begin
for Y := 0 to Form1.Image1.Picture.Bitmap.Height - 1 do begin
Ligne := Image1.Picture.Bitmap.ScanLine[Y];
for X := 1 to Form1.Image1.Picture.Bitmap.Width do begin
bX := X * 3;
if X = Form1.Image1.Picture.Bitmap.Width then
Ligne[bX-2] := 0
else
Ligne[bX-2] := (Ligne[bX+1]);
end;
end;
Form1.Image1.Repaint;
end;
end;
{ ***** Image without Red Color ***** }
الحصول على صورة بدون الاعتماد على اللون الأحمر
كود :
procedure TForm1.ImgWRBtnClick(Sender: TObject);
var
X,Y, bX : Integer;
Ligne : PByteArray;
begin
for Y := 0 to Form1.Image1.Picture.Bitmap.Height -1 do begin
Ligne := Form1.Image1.Picture.Bitmap.ScanLine[Y];
for X := 0 to Form1.Image1.Picture.Bitmap.Width -1 do begin
bX := X * 3;
Ligne[bX+2] := 0;
end;
Form1.Image1.Repaint;
end;
end
{ ***** Obtain Flow Image ***** }
الحصول على صورة مشوشة
كود :
procedure TForm1.ImgFlowBtnClick(Sender: TObject);
var
Z,X,bX,Y : Integer;
Ligne : PByteArray;
begin
for Z := 0 to 3 do Begin
for Y := 0 to Form1.Image1.Picture.Bitmap.Height -1 do begin
Ligne := Image1.Picture.Bitmap.ScanLine[Y];
for X := 1 to Form1.Image1.Picture.Bitmap.Width -1 do Begin
bX := X * 3;
Ligne[bX+2] := (Ligne[bX+2]+Ligne[bX-1] ) Div 2;
Ligne[bX+1] := (Ligne[bX+1]+Ligne[bX-2]) Div 2;
Ligne[bX] := (Ligne[bX]+Ligne[bX-3]) Div 2;
end;
end;
Form1.Image1.Repaint;
end;
end;
لمن يريد التعامل مع الصور يستحن أن يستعمل صور بصيغة *.bmp
تم ارفاق صورة لمن يريد التجربة مع الملفات
بالتوفيق للجميع
و السلام.