Prvo u private delu forme stavis:
Code:
Bm : TBitmap;
pa onda u event OnCreate forme stavis:
Code:
...
Bmp := TBitmap.Create;
...
u OnDestroy stavis:
Code:
Bmp.Free;
stavis ispod
implementation dela u unit-u:
Code:
procedure SlikajEkran(Bm : TBitmap);
var
DC: HDC;
X, Y: integer;
SirinaEkrana, VisinaEkrana: integer;
begin
SirinaEkrana := GetSystemMetrics(sm_CXScreen); // uzimamo sirinu ekrana
VisinaEkrana := GetSystemMetrics(sm_CYScreen); // uzimamo visinu ekrana
Bm.Width := ScreenWidth; // podesavamo velicinu bitmape i format
Bm.Height := ScreenHeight;
Bm.PixelFormat := pf24bit;
DC := GetDC(0); // uzimamo potreban handle
try
// radimo kopiranje sa canvas-a ekrana na
// nasu bitmap-u
BitBlt(Bm.Canvas.Handle, 0, 0,
SirinaEkrana, VisinaEkrana, DC, 0, 0, SrcCopy);
finally
ReleaseDC(0, DC); // vracamo handle
end;
end;
stavis TButton na formu i stavis na OnClick:
Code:
begin
// "Slikamo" ekran
SlikajEkran(Bmp);
// Sada radis sa slikom sta hoces, ispitujes piksele npr.
if Bmp.Canvas.Pixels[100,100] = clGreen then ShowMessage('Piksel na poziciji 100,100 je zelene boje');
end;
Ako ti treba da ispitujes vise puta u sekundi onda je pozeljno da u pozivu BitBlt-a
prosledis koordinate koje ne obuhvataju ceo ekran kao u gornjem primeru vec samo deo
ekrana koji tebe interesuje. Takodje treba da podesis velicinu bitmape pre toga na
odgovarajucu velicinu. Na taj nacin ces dobiti brzi kod. Za ispitivanje piksela bitmap-a
smo vec imali raspravu na ovom forumu pa potrazi.