auf BMP in Picture Control zugreifen
-
Hi,
ich möchte auf die Pixel eines BMPs zugreifen, dass als Picture Control in einen Dialog eingebunden ist. Wie komme ich da dran? Die müssen ja nun irgendwo im Speicher stehen.
Dank für jeden Hinweis.
-
Tjo... was hälst de davon dir nen Bitmap Handle mit CStatic::GetBitmap zu holen?
-
Danke, nachdem ich dann nach HBITMAP gegoogelt habe, habe ich - glaube ich - den richtigen Weg gefunden. Werde es morgen direkt mal ausprobieren.
-
Bin leider keinen Schritt weiter gekommen. Wie komme ich mit dem HBITMAP an die Pixeldaten?
-
Versuch mal die Funktion GetBitmapBits. Hier ein Beispiel aus meiner Anwendung:
HBITMAP hBitmap; /*...*/ m_lSize = m_lHeight * m_lWidth; m_pMemory1 = (BYTE*)malloc(m_lSize); /*...*/ GetBitmapBits(hBitmap,m_lSize,m_pMemory1);Ich hoffe die Codeschnippsel helfen dir weiter.
Gruß charlie
-
Stichwort: CImage, CImage::Attach, CImage::SetPixel, CImage::GetPixel, usw.
Grüssli
-
Dravere schrieb:
Stichwort: CImage, CImage::Attach, CImage::SetPixel, CImage::GetPixel, usw.
Grüssli
CImage finde ich in der MFC nicht. Meinst Du damit die Klasse von codeproject.com?
-
Nö, ist eine ATL Klasse.
Solltest eigentlich in der MSDN finden.Grüssli
-
Aus historischen Gründen bin ich noch auf VC6 angewiesen. Dort scheint es CImage (noch) nicht zu geben.
-
charlie-ux schrieb:
Versuch mal die Funktion GetBitmapBits. Hier ein Beispiel aus meiner Anwendung:
HBITMAP hBitmap; /*...*/ m_lSize = m_lHeight * m_lWidth; m_pMemory1 = (BYTE*)malloc(m_lSize); /*...*/ GetBitmapBits(hBitmap,m_lSize,m_pMemory1);Ich hoffe die Codeschnippsel helfen dir weiter.
Gruß charlie
Wie komme ich denn dann an die Informationen, wieviele Bits ein Pixel hat, ob es per Palette geht oder nicht, also an die Headerinformationen?
-
Keiner ne Ahnung?????
-
Nicht wirklich, vor allem ohne CImage. Eine Möglichkeit gebe es vielleicht über einen CDC zu gehen. Ist aber ziemlich kompliziert find ich.
HBITMAP hBitmap; // Das HBITMAP, welches du vom PictureCtrl bekommst CBitmap* pBitmap = CBitmap::FromHandle(hBitmap); // Dann musst du dir irgendwie einen CDC, CClientDC oder CPaintDC erstellen. // Frag mich aber nicht genau wie, so dass du nicht in das Fenster reinzeichnest. CDC dc; // Das ist nun dein erstellter CDC oder was auch immer. CBitmap* pOldBitmap = dc.SelectObject(pBitmap); // Und nun solltest glaub ich mit GetPixel, bzw. SetPixel die RGB Farben holen, bzw. setzen können. // Aufräumen ... dc.SelectObject(pOldBitmap); // ... und löschen nicht vergessen. pBitmap->DeleteObject();Alle Angaben ohne Gewähr. So habe ich dies noch nie versucht.
Grüssli