Funktion GetDIBits

langer1801

Erfahrenes Mitglied
Hallo,

ich habe ein Problem bei der Bearbeitung von DIB's. Ich will ein Image von einem File laden und dann als DIB auf dem Monitor bzw. Drucker ausgeben. Das Laden des Bildes klappt offensichtlich, jedenfalls bekomme ich ein gültiges Handle. Probleme bekomme ich bei der Nutzung der Funktion GetDIBits, um Informationen über das geladene Bild zu bekommen. Sie arbeitet zwar, aber in der BITMAPINFO stehen danach unmögliche Werte. Ich denke mal, dass die Aufrufparameter, insbesondere der Parameter cScanLines, nicht stimmt
Code:
 	BITMAPINFO bminfo;
	CString m_sFilename="E:\\My Projects\\Abr-net1\\res\\Billinghausen.bmp";
	HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),m_sFilename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
	DWORD error=GetLastError();
	::GetDIBits(pDC->GetSafeHdc(),hBitmap,0,0,0,&bminfo,DIB_RGB_COLORS);
Woher bekomme ich denn vor Aufruf der Funktion den richtigen Wert der zu scannenden Zeilen?

langer
 
In diesem Zusammenhang:
Wer hat Erfahrung mit der im Buch "Inside Visual C++.NET" veröffentlichten Klasse CDib?
Ich wollte diese Klasse nutzen, bekomme aber nach dem Importieren der Klassendateien cdib.h und cdib.cpp beim Compilieren Linkerfehler ("unaufgelöstes externes Symbol...."), obwohl ich eben nur die Klasse importiert habe, aber noch keinerlei Aufrufe in anderen Klassen implementiert habe. Und Anklicken der Fehlermeldung bringt auch nix, weil in keine Datei gesprungen wird, die die Fehlermeldung produziert. Und ich hatte schon gehofft, damit meine DIB-Probleme zu umgehen. :offtopic:
Mit der Hoffnung auf Hilfe

mfg

langer
 
Mit der CDib-Klasse kenne ich mich leider auch nicht aus.
Was dein Codebeispiel betrifft - du solltest den BITMAPINFOHEADER initialisieren:

Code:
BITMAPINFO bminfo;
::ZeroMemory(&bminfo, sizeof(BITMAPINFO));
bminfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 
Habe jetzt auch die Ursache für die Probleme mit CDib raus. Man muß in den Projekt-Eigenschaften unter "Linker->Zusätzliche Abhängigkeiten" die VFW32.lib einbinden, dann klappts.

langer
 
Zurück