![]() |
GetPixel unter Vista
Hi@all
ich hatte mal vor längerer Zeit eine Funktion geschrieben, die über GetPixel die Durchschnittsfarbe einer ausgewählten Fläche am Bildschirm errechnet. Dazu habe ich einfach die Farben einiger Pixels geholt, alle zusammengezählt und dann wieder durch die Pixelanzahl geteilt, eigentlich ziemlich simpel. Auf 2000 und XP hat das alles super funktioniert, nur unter Vista will das ganze nicht so recht Sobald ich versuche die Pixels zu "scannen" reagiert das Programm nicht mehr gibt es unter Vista dafür einen eigenen Befehl? was läuft da falsch? Gruß Markus |
Re: GetPixel unter Vista
Du könntest uns deinen bisher verwendeten Code mal zeigen. Das würde die Sache auf jeden Fall leichter machen.
Flare |
Re: GetPixel unter Vista
so sieht meine Prozedur aus
Delphi-Quellcode:
procedure AreaToPix;
var Handle: THandle; yFor, xFor: Integer; bRed, bGreen, bBlue: Byte; PixelColor: Integer; bXgesRed, bXgesGreen, bXgesBlue: Integer; //Duchschnittsfarben Horizontal bYgesRed, bYgesGreen, bYgesBlue: Integer; //Duchschnittsfarben Vertikal begin Handle := GetDC(0); try bXgesBlue := 0; bXgesGreen := 0; bXgesRed := 0; for yFor := 1 to 9 do begin bYgesBlue := 0; bYgesGreen := 0; bYgesRed := 0; for xFor := 1 to 7 do begin PixelColor := GetPixel(Handle, round(yFor * ((x2-x1)/9)) + x1, round(xFor * ((y2-y1)/7)) + y1); bBlue := PixelColor; bGreen := PixelColor shr 8; bRed := PixelColor shr 16; bYgesBlue := bYgesBlue + bBlue; bYgesGreen := bYgesGreen + bGreen; bYgesRed := bYgesRed + bRed; end; bYgesBlue := Round(bYgesBlue / 7); bYgesGreen := Round(bYgesGreen / 7); bYgesRed := Round(bYgesRed / 7); bXgesBlue := bXgesBlue + bYgesBlue; bXgesGreen := bXgesGreen + bYgesGreen; bXgesRed := bXgesRed + bYgesRed; end; bXgesBlue := Round(bXgesBlue / 9); bXgesGreen := Round(bXgesGreen / 9); bXgesRed := Round(bXgesRed / 9); //Werte ausgeben u_usbpwm.Form1.changeLEDs(bXgesRed, bXgesGreen, bXgesBlue); finally ReleaseDC(0, Handle); end; end; |
Re: GetPixel unter Vista
Hallo,
bei mir funktioniert diese Routine genau so, wie sie soll. Das Problem ist aber, dass Du auf den DC des Desktops zugreifst. Das sollte man unter Vista vermeiden, da es sehr lang dauert. Gruß xaromz |
Re: GetPixel unter Vista
von VNC weiß ich, dass man den Desktop (oder den gewünschten Bereich) erstmal in ein Speicherbitmap kopieren sollte, um ihn dann weiter analysieren zu können.
|
Re: GetPixel unter Vista
bin ich noch gar nicht drauf gekommen,
aber bracht es nicht ein haufen Speicher wenn ich den ganzen Desktop "zwischenspeichere" außerdem soll diese Prozdur ca 100-250 mal pro Sekunde durchlaufen wird das ganze dann nicht viel zu langsam? |
Re: GetPixel unter Vista
Zitat:
Der Speicher von 1600x1200 bleibt unterhalb von 10mb. Am schnellsten würde es funktionieren, wenn du wie UltraVNC einen Hook verwendest, der nur die Änderungen auf dem Bildschirm dir mitteilt. Schau dir doch die Quellen von UltraVNC mal an. |
Re: GetPixel unter Vista
ich habe mir die ganzen Sachen angeschaut, aber ganz ehrlich ich blick da nicht durch
zu der Sache mit dem Bitmap: da gibt es schon einige Routinen, welche aber alle den DC verwenden und somit wohl auch nicht schneller sein werden mir ist jetzt auch aufgefallen, dass die DC Geschichte auf Vista nur schrecklich langsam ist, wenn man nämlich 100 Anfragen pro Sek sendet, siehts eben so aus, als ob gar nix mehr ginge :? das mit der Systemauslastung ist mir schon bewusst. Ich hatte auf meinem alten PC (AMD 2,6GHz_WinXP) eine CPU-Auslastung von ca 45% bei 250 Anfragen/s, da dachte ich eigentlich dass es auf nem Intel 2,2 Core2Duo (aber mit Vista) doch etwas schneller geht und nicht langsamer vllt könntet ihr mal ein CodeSchnipsel posten, mit einer Alternative zu DC, oder die Hook Sache fände ich auch spannend, wobei ich eigentlich für meine Zwecke keinen Nutzen darin sehe nur die Veränderten Bereiche auszulesen, da ich für die Druchschnittsfarbe doch alle brauche |
Re: GetPixel unter Vista
hab niemand ne Idee wie das unter Vista läuft ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 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