Hallo allen,
Ik ben al een tijd bezig met een programmatje dat bepaalde veranderingen in een bepaald gedeelte van het scherm detecteerd en hierop een procedure uitvoert. Het probleem is eigenlijk als volgt: In een bepaald gedeelte van mijn scherm heb ik bewegende objecten. Deze objecten hebben allen een vast kenmerk, bv een rode kleurwaarde. Al deze objecten komen langs een bepaald gebied op mijn scherm. Dit gebied houdt ik in de gaten op mijn scherm. hiervoor gebruik ik de onderstaande procedure maar deze is nog steeds niet snel genoeg. Als ik de objecten sneller laat bewegen dan is de onderstaande procedure te langzaam. Heeft iemand een beter idee?
Ik ben al een tijd bezig met een programmatje dat bepaalde veranderingen in een bepaald gedeelte van het scherm detecteerd en hierop een procedure uitvoert. Het probleem is eigenlijk als volgt: In een bepaald gedeelte van mijn scherm heb ik bewegende objecten. Deze objecten hebben allen een vast kenmerk, bv een rode kleurwaarde. Al deze objecten komen langs een bepaald gebied op mijn scherm. Dit gebied houdt ik in de gaten op mijn scherm. hiervoor gebruik ik de onderstaande procedure maar deze is nog steeds niet snel genoeg. Als ik de objecten sneller laat bewegen dan is de onderstaande procedure te langzaam. Heeft iemand een beter idee?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| function spthread: integer; stdcall
const
RectWidth = 290;
RectHeight = 1;
RectLeft = 866;
RectTop = 660;
var
Bitmap: TBitmap;
DC: HDC;
x, w, h, L, t, y, color: Integer;
PixelPtr: PRGBQuad;
I: Integer;
begin
I := 0;
Bitmap := TBitmap.Create;
try
w := RectWidth;
h := RectHeight;
L := RectLeft;
T := RectTop;
Bitmap.Width := w;
Bitmap.Height := h;
DC := GetDC(0);
try
BitBlt(Bitmap.Canvas.Handle, 0, 0, w, h,
DC, L, T, SRCCOPY);
finally
ReleaseDC(0, DC);
end;
Bitmap.PixelFormat := pf32Bit;
for y := 0 to h - 1 do
begin
PixelPtr := PRGBQuad(Bitmap.ScanLine[y]);
for x := 0 to w - 1 do
begin
I := I +1;
Inc(PixelPtr);
Color := PixelPtr^.rgbRed;
if Color = 0 then begin Exit; end;
if Color = 227 then begin SetCursorPos (L+I, T); Exit; end;
if Color < 50 then begin SetCursorPos (L+I, T); Exit; end;
if Color = 208 then begin SetCursorPos (L+I+50, T); Exit; end;
end;
end;
finally
Bitmap.Free;
end;
end; |