8 Bit Graustufen Bitmap unter TrueColor richtig anzeigen
-
Hallo,
ich bekomme von ein 8Bit Graustufen-Bitmap und muss es in TrueColor darstellen.
Wenn ich die Farbeinstellung auf 256 Farben reduziere bekomme ich ein Bild, aber leider nicht in Graustufe sonder kunterbunt. Stelle ich die Farbtiefe der Grafikkarte höher als 256 Farben, wird kein Bild dargestellt.
Liegt es am BITMAP::bm_type?
Welcher BITMAP::bm_type muss bei dem Bitmap angegeben sein?
bool CAACVisionView::ShowPicture( CDC *pDC ) { CBitmap tempCBitmap, *pOldBMP; CPalette *pOldPalette; CMarker marker; bool retValue, isNewPicture; BOOL bRetCode; isNewPicture = false; CAACVisionDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return false; retValue = false; m_bIsPictureFromFile = false; //Zeiger initialisieren pOldBMP = NULL; pOldPalette = NULL; // temporäres DC erstellen CDC *pTempDC = new CDC; m_nGrabber = pDoc->GetGrabberPort(this); if( m_nGrabber != -1 ) { if( m_bPictureRefreshTimerRunning ) { m_OriginalBitmap = GetBitmapN( m_nGrabber,0, &isNewPicture ); } else { m_OriginalBitmap.bmBits = m_pPicture; } if(( pTempDC != NULL ) && ( m_OriginalBitmap.bmBits != NULL )) { bRetCode = pTempDC->CreateCompatibleDC( pDC ); ASSERT(bRetCode); if( bRetCode != 0 ) { pOldPalette = pTempDC->SelectPalette(&m_GreyScalePalette, 0 ); pTempDC->RealizePalette(); if( isNewPicture ) { m_nPicturesTaken++; } // temp. CBitmap-Objekt fuer geladene Bitmap erstellen tempCBitmap.CreateBitmapIndirect(&m_OriginalBitmap); // Groesse und Anzahl der darstellbaren Farben des Speicher-DCs // auf Bitmap-Aufloesung einstellen pOldBMP = pTempDC->SelectObject(&tempCBitmap); // Bitmap-Daten nun aus dem Speicher auf den Bildschirm kopieren pDC->BitBlt( m_PictureStart.x, m_PictureStart.y, m_OriginalBitmap.bmWidth, m_OriginalBitmap.bmHeight, pTempDC, 0, 0, SRCCOPY); pTempDC->SelectPalette(pOldPalette, 0 ); retValue = true; pTempDC->SelectObject(pOldBMP); m_bPictureUpdated = true; } else { AfxMessageBox("Das Programm wird wegen Ressourcenmangel beendet", MB_ICONSTOP ); exit(0); } } } //DeviceContext Zuweisung aufheben und löschen this->ReleaseDC( pTempDC ); pTempDC->DeleteDC(); delete pTempDC; return retValue; }