Hi,
der Code funktioniert jetzt soweit. Allerdings ist das ganze wie vermutet etwas langsam gerade bei großen scan bereichen.
Deswegen hatte ich mal weitergesucht und bin recht oft auf eine G32 oder Graphic 32
unit gestoßen, die wohl funktionen beinhalten soll mit denen das ganze sehr schnell und einfach geht.
Kennt jemand die
Unit bzw. weiß mit welcher Funktion es schnell gehen soll ?
Mein aktueller Stand ist folgender:
Delphi-Quellcode:
procedure TForm1.Timer3Timer(Sender: TObject);
var
Color: TColor;
Screenshot: TBitmap32;
x, y, i, high_r, high_g, high_b, end_r, end_g, end_b: integer;
ColorArray:
array[0..2, 0..255]
of cardinal;
begin
high_r := 0;
high_g := 0;
high_b := 0;
end_r := 0;
end_g := 0;
end_b := 0;
for i := 0
to 255
do
begin
ColorArray[0, i] := 0;
ColorArray[1, i] := 0;
ColorArray[2, i] := 0;
end;
Screenshot := TBitmap32.Create;
FormularScreenShot(Screenshot, GetDesktopWindow);
for y := 700
to 1000
do
begin
for x := 200
to 500
do
begin
Color := Screenshot.Pixel[x, y];
inc(ColorArray[0, GetRValue(Color)]);
inc(ColorArray[1, GetGValue(Color)]);
inc(ColorArray[2, GetBValue(Color)]);
end;
end;
for i := 0
to 255
do
begin
if ColorArray[0, i] > high_r
then
begin
high_r := ColorArray[0, i];
end_r := i;
end;
if ColorArray[1, i] > high_g
then
begin
high_g := ColorArray[1, i];
end_g := i;
end;
if ColorArray[2, i] > high_b
then
begin
high_b := ColorArray[2, i];
end_b := i;
end;
end;
Screenshot.Free;
JvPanel2.Color :=
RGB(end_r, end_g, end_b);
end;
Ich speichere jetzt erstmal das Dektopbild in ein Bitmap um dann später daraus die Farben zu lesen.
Mit dem Code oben indem ich nun versucht habe die G32 zu verwenden, gibt es probleme mit der Farbausgabe (farbe stimmt nicht blau anstelle von rot) und schneller als die alte Methode ist das auch nicht.
Wenn man im obigen die Screenshot: TBitmap32; wieder gegen TBitmap tauscht stimmt die angezeigte Farbe auch wieder, allerdings auch bei einer zu langsamen Geschwindigkeit.
Jemand eine Idee wie ich mit der G32 schneller zum laufen bekomme ?
mfg Yannic
Edit1. Das Farbproblem habe ich gerade gelöst hatte nicht bedacht das ich TColor32 erstmal wieder in TColor zurückwandeln muss.