hDC getPixel gibt immer -1 zurück...
-
hi there!
ich versuche vom desktop das bild zu bekommen, aber brauche jeden pixel einzeln, oder zumindest in einem "einfachen" format (array oder sowas), da ich es über jni an java schicke.
derzeit mache ich das über nen handle vom desktop. die funktion getPixel(h,x,y) liefert mir aber maximal etwa 100 pixel mit sehr merkwürdig grossen zahlen zurück, und der rest ist -1.... sehr komisch.
kann mir da jemand helfen ??
auch sehr merkwürdig ist die schlechte performance.. bei einem durchlauf aller pixel braucht die funktion mehr als eine sekunde (!!!).jeder hinweis wäre schön!
danke!
-
Deine "merkwürdigen großen Zahlen" sind wohl Werte vom Typ COLORREF. Und -1 ist wohl der Wert der Konstante: CLR_INVALID, die du bekommst wenn das passiert:
If the pixel is outside of the current clipping region, the return value is CLR_INVALID.
-
hast vielleicht ein UpdateValidRect vergessen?
(nur so ne Noobidee)
-
muss ich die clipping region auf dem device setzen? und wenn wie?
aber danke erstmal.
@Luckie: wo hast du denn das "zitat" her? ich tue mich sehr schwer infos über irgendwelche api-funktionen zu finden...marcello
alias gehirnmann
-
Er hats aus der MSDN.
Link[ Dieser Beitrag wurde am 25.06.2003 um 11:17 Uhr von C Newbie editiert. ]
-
GetDIBits oder GetBitmapBits ?!
-
zu update oder validaterect oder ähnliches finde ich nirgends was im zusammenhang mit Device-handles.. ich hab ja kein fenster zum neuzeichnen.. also krieg ich auch kein hWnd.... und den brauch ich bei den meisten funktionen mit validate*(..)
ausserdem sollte es doch bei einem Device keine -1 zurück geben wenn ich offensichtlich im gültigen bereich des devices bin...
-
Das sollte funzen:
COLORREF pixel; HDC dcDesktop; int cx, cy, x, y; // Größe vom Desktop holen: cx=GetSystemMetrics(SM_CXSCREEN); cy=GetSystemMetrics(SM_CYSCREEN); // DeviceContext-Handle vom Desktop holen: dcDesktop=GetDC(NULL); // Pixel holen: for (x=0; x<cx; x++) { for (y=0; y<cy; y++) { pixel=GetPixel(dcDesktop,x,y); // Irgendwas mit dem Pixel machen // Mit GetRValue, GetGValue und GetBValue kann man die einzelnen Farben // rausholen... } } // DeviceContext-Handle wieder freigeben: ReleaseDC(NULL,dcDesktop);
Viel viel schneller sind allerdings die Funktionen die flenders schon genannt hat...
[ Dieser Beitrag wurde am 25.06.2003 um 19:25 Uhr von geeky editiert. ]