ich sitze gerade an einer Routine, um ein Image in ein anderes zu kopieren und dabei gleichzeitig Pixelmanipulationen durchzuführen. Mit PB's Point() und Plot() wird das natürlich nix, weil zu langsam.
Ich versuche nun mir die nötigen Daten der Images per API zu besorgen, um die Pixel dann manuell von einem Memorybereich zum anderen zu kopieren.
Klappt auch gut, nur leider kann es ja je nach System und Grafikkarte sein, daß das Pixelformat (RGB, BGR) unterschiedlich ist.
Bekomme ich das auch über die dsBitmap Struktur heraus?
Hier die Daten, die ich mir bsiher extrahiere:
Code: Alles auswählen
If GetObject_(ImageID(#ImageID_Original), SizeOf(BITMAP), @ImageSettings_Original\dsBitmap)
Else
Error("Beim Anlegen der Bitmapstrukture des Originalbild ist was schiefgelaufen!")
EndIf
sDebug + "Image Buffer Adresse : " + StrU(ImageSettings_Original\dsBitmap\bmBits, #Long) + #LF$
sDebug + "Image Buffer Pitch : " + StrU(ImageSettings_Original\dsBitmap\bmWidthBytes, #Long) + #LF$
sDebug + "Image Buffer Bits pro Pixel: " + StrU(ImageSettings_Original\dsBitmap\bmBitsPixel, #Long) + #LF$
sDebug + "Image Color Sheme : " + StrU(ImageSettings_Original\dsBitmap\bmPlanes, #Long) + #LF$
...
LONG bmType;
LONG bmWidth;
LONG bmHeight;
LONG bmWidthBytes;
WORD bmPlanes;
WORD bmBitsPixel;
LPVOID bmBits;
Ich tippe mal auf bmPlanes, ergibt bei mir 1. Leider steht in der Win32 API Hilfe dazu nur "Specifies the count of color planes.", daher bin ich mir nicht sicher.
Edit: Noch mal ne Frage hinterher: Wieso muß ich mir eigentlich separat eine xyz.BITMAP Struktur anlegen und mittels GetObject_ füllen lassen? Sollte das Image, das da auf dem Schirm zu sehen ist nicht schon eine eigene BITMAP-Struktur haben? Es würde doch genügen, wenn ich an die rankäme. (Hat jetzt mit dem Pixelformat nix zu tun, kommt mir aber irgendwie doppelt gemoppelt vor mit der Strukturkopie)