Pixelfarbe auslesen
-
Moin,
ich habe ein Avi-File und möchte heraus bekommen, welchen RGB-Wert der erste Pixel hat.
Mit AVIStreamGetFrame() kann man sich ein DIB geben lassen.
Es kann sich um ein 16 oder 24 bit Bitmap handeln.Habe jetzt leider keinen Plan, wie weiter machen muss.
Ich hoffe Ihr könnt mir ein wenig helfen.
-
Zurück bekommst Du ja irgendwie einen Pointer auf eine "packed DIB" oder so.
Dann müsste man ja rein-theoretisch mit CreateDIBSection() an nen normales Bitmap-Handle kommen, dass man wieder in nen DC rein-selektieren kann und dann dann z.B. GetPixel() benutzen kann.
Wenn das "packed DIB" gar nicht komprimiert/enkodiert ist, müsste man die Pixelfarbe auch direkt aus den Pixeldaten rauskriegen können...(Achtung: Reine Spekulation - Hab damit nie was gemacht...)
-
Moin,
Ich habe das ganze mal ausprobiert, aber scheinbar mache ich noch etwas falsch, da ich für die Farbe immer 0 herausbekomme (an jeder Stelle).
(In der Datei beträgt sie aber (RGB(0,132,132)).Habe es folgendermaßen ausprobiert:
LPBITMAPINFO pBitmapInfo = (LPBITMAPINFO)AVIStreamGetFrame(m_pGF, 0); HBITMAP hBitmap = CreateDIBSection(dc, pBitmapInfo, DIB_RGB_COLORS, &pBits, NULL, 0); ASSERT(pBits != NULL); VERIFY(::SelectObject(dc, hBitmap) != NULL); COLORREF color = ::GetPixel(dc, 0, 0);Wo habe ich mir das hier zu einfach vorgestellt?
-
Ich dachte AVIStreamGetFrame() liefert pBits entsprechend zum BITMAPINFOHEADER, den man bei AVIStreamGetFrameOpen() gewünscht hat und nicht LPBITMAPINFO.
-
Laut dem kommt ein BITMAPINFOHEADER zurück

http://www.gamedev.net/reference/programming/features/avifile/page4.asp...und ich glaube doch besser CreateDIBitmap() nehmen, damit man die Pixeldaten auch sofort drin hat

CreateDIBSection() erzeugt nur ne leere Bitmap, wo man die Pixeldaten nur direkt mittels pBits setzen und lesen kann.