Hallo!
Ich hab ein Problem, bei dem ich nicht weiter komm. Und zwar möchte ich 8 Bit Bilder (Grauwert) in meinem GUI anzeigen lassen, aber irgendwie ist der Output ganz komisch. Hab schon etliches probiert.. mit 24 Bit funktionierts einwandfrei.. hier codeausschnitte:
Bitmapinfoheader auslesen und Bild anzeigen (24 Bit)
[size=10]LPBITMAPINFO pDIB = m_AviFile.GetDIB(); [COLOR=green]// Infoheader auslesen[/COLOR][/SIZE]
[size=10][size=10]uint8 *pPtr = m_[size=10]Image->GetDataPtr(); [COLOR=green]// Pointer zu den Pixeldaten auslesen[/COLOR][/SIZE]
[/SIZE]
[size=10]Bitmap offBmp(pDIB, pPtr); [COLOR=green]// Bitmap erstellen[/COLOR][/SIZE]
[COLOR=#008000][/COLOR]
[COLOR=#008000]// Anzeige[/COLOR]
[size=10][size=10]RECT rc;[/SIZE]
[size=10]::GetClientRect(m_Picture.GetSafeHwnd(), &rc);[/SIZE]
[size=10]Graphics onGr(m_Picture.GetSafeHwnd());[/SIZE]
[size=10]onGr.DrawImage(&offBmp, rc.left, rc.top, (rc.right-rc.left), (rc.bottom-rc.top));[/SIZE]
[/SIZE][/SIZE]
Alles anzeigen
Änderungen für 8 Bit:
[size=10]LPBITMAPINFO pDIB = m_AviFile.GetDIB();[/SIZE]
[size=10]pDIB->bmiHeader.biBitCount = 8;[/SIZE]
[size=10]pDIB->bmiHeader.biSizeImage = pDIB->bmiHeader.biWidth * pDIB->bmiHeader.biHeight;[/SIZE]
[size=10]pDIB->bmiHeader.biClrUsed = 256;[/SIZE]
[size=10][COLOR=#0000ff]for[/COLOR][/SIZE][size=10]([/SIZE][size=10][COLOR=#0000ff]int[/COLOR][/SIZE][size=10] i=0; i<256; i++)[/SIZE]
[size=10]{[/SIZE]
[size=10] pDIB->bmiColors[i].rgbRed = i;[/SIZE]
[size=10] pDIB->bmiColors[i].rgbGreen = i;[/SIZE]
[size=10] pDIB->bmiColors[i].rgbBlue = i;[/SIZE]
[size=10] pDIB->bmiColors[i].rgbReserved = 0;[/SIZE]
[size=10]}[/SIZE]
Alles anzeigen
Ich setz den biBitCount von 24 auf 8, die größe vom Bild ist auch anders, als im 24 Bit Image, nämlich nur ein drittel, also (Breite*Höhe) statt (Breite*Höhe*3).
biClrUsed = 256 sagt, dass eine Palette verwendet wird, wobei 256 Werte darin vorkommen. Am Schluss füll ich die Palette.. sieht jemand einen Fehler? Wenn jemand Beispielbilder sehen will, kann ich das machen, aber ich hoffe, dass jemand den Fehler jetzt schon sieht.
mfg