AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Farbe von Bildschirminhalt ermitteln ?
Thema durchsuchen
Ansicht
Themen-Optionen

Farbe von Bildschirminhalt ermitteln ?

Ein Thema von Blamaster · begonnen am 1. Jul 2009 · letzter Beitrag vom 19. Jul 2009
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

Re: Farbe von Bildschirminhalt ermitteln ?

  Alt 2. Jul 2009, 16:22
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz