Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Alle Pixel durchscannen (https://www.delphipraxis.net/10286-alle-pixel-durchscannen.html)

Supremacy 15. Okt 2003 12:28


Alle Pixel durchscannen
 
Hi @ all,

also ich habe ein Problem mit dem durchscannen von allen Pixeln die auf dem Desktop sind.
Was ich vorhabe ist alle Pixel durchzuscannen und da wo er der farbwert '400D0D' auftritt soll eine Label-Caption gesetzt werden.
Delphi-Quellcode:
z.b. label9.Caption := 'Pixel gefunden bei ' + inttostr(i) + '/' + inttostr(x);
hier ist der gesamte code.
Delphi-Quellcode:
for i:=0 to screen.Width do begin
for x:=0 to screen.Height do begin
  application.ProcessMessages;
  lampe := TColorToHex(DesktopColor(i, x));
  if lampe = '400D0D' then begin
    label9.Caption := 'Pixel gefunden bei ' + inttostr(i) +'/'+ inttostr(x);
  end;
end;

end;
wenn ich das eine zeitlang durchlaufen lasse konnt ein ganz toller fehler der sehr aussagekräftig ist.
"Leinwand/Bild erlaubt kein" <- mehr kommt als fehler nicht.

Hat jemand eine idee wie ich das lösen kann ?? oder hat jemand eine andere Methode dafür ??
thx schonmal.

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

Luckie 15. Okt 2003 12:40

Re: Alle Pixel durchscannen
 
... Zeichnen"
Der kommt dann, wenn zwei Threads gleichzeitig auf einen Canvas zugreifen wollen oder so.

Sanchez 15. Okt 2003 12:42

Re: Alle Pixel durchscannen
 
Vermutlich sieht die komplette Meldung so aus:

"Leinwand/Bild erlaubt kein Zeichnen"

Das heisst wahrscheinlich, das der Canvas auf den du bearbeiten willst durch einen anderen Thread blockiert ist.

Scannst du den Canvas in einem expliziten Thread??

[EDIT]Da war ich wohl zu langsam[/EDIT]

OLLI_T 15. Okt 2003 12:52

Re: Alle Pixel durchscannen
 
Ändere doch mal folgendes:

Delphi-Quellcode:
for i:=0 to screen.Width-1 do begin

for x:=0 to screen.Height-1 do begin
Manchmal ist weniger mehr ...

Gruss

OLLI

Ps.: Eventuell kannst Du Deine Routine erheblich beschleunigen, wenn Du mit BitBlt zunächst den Desktop in ne Bitmap kopierst und dann per Scanline an die Geschichte rangehst! GetPixel bzw. Canvas.Pixel[x,y] ist nämlich laaaangsaaaam.

Wormid 15. Okt 2003 12:56

Re: Alle Pixel durchscannen
 
Das mit dem Screenshot voher würde ich auch anraten, dadurch sollten Probleme mit dem gleichzeitigen Zugriff erfolgreich vermieden werden!

Gruß

Wormid

P.S.: Außerdem ist ein Zugriff per Pixels[x, y] in der Tat deutlich langsamer...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz