Im Dialogfeld aus einem Farbbild ein Grauwertbild erstellen?
-
Hallo,
Ich habe ein Dialogfeld erstellt, wo 2 Bilder per [CPictureEx-Klasse (von CodeGuru)] angezeigt werden --- das funktioniert auch soweit...
Aber nun möchte ich in einer [bzw für beide Bilder an zwei] ander(en) Stellen aus den jeweiligen Bildern ein Grauwertbild erzeugen und darstellen.
Dafür habe ich im Dialogfeld 2 Static-Text-Felder erzeugt (IDC_GREYPICTURE1 & IDC_GREYPICTURE2) wo ich diese dann anzeigen will.
Der untenstehende Code (Funktion wird aufgerufen und es wird auch ordnetlich angezeigt, jedoch nachdem allse erledigt ist (auch das 2 . Bild in Graustufen umgerechnet ist und auch angezeigt wurde) zeichnet sich die Dialogbox neu (hab ich ja auch erzwungen mit
Invalidate(TRUE);jedoch sind danach beide Static Boxen wieder leer???
void CImage_ManipDlg::GetGrayedBitmap() { CPaintDC pdc1(GetDlgItem(IDC_MYPICTURE1)); CPaintDC pdc2(GetDlgItem(IDC_MYPICTURE2)); CPaintDC pdc_grey1(GetDlgItem(IDC_GREYPICTURE1)); CPaintDC pdc_grey2(GetDlgItem(IDC_GREYPICTURE2)); COLORREF cr; BYTE val; INT x, y; INT bmHeight; INT bmWidth; /// Bild 1 umwandeln bmHeight=rect1.bottom; bmWidth=rect1.right; for(y = 0; y < bmHeight; y++) { for(x = 0; x < bmWidth; x++) { cr = pdc1.GetPixel(x, y); val = (BYTE)(((DOUBLE)GetRValue(cr) * 0.3) + ((DOUBLE)GetGValue(cr) * 0.59) + ((DOUBLE)GetBValue(cr) * 0.11)); pdc_grey1.SetPixel( x, y, RGB(val,val, val)); } } /// Bild 2 umwandeln bmHeight=rect1.bottom; bmWidth=rect1.right; for(y = 0; y < bmHeight; y++) { for(x = 0; x < bmWidth; x++) { cr = pdc2.GetPixel(x, y); val = (BYTE)(((DOUBLE)GetRValue(cr) * 0.3) + ((DOUBLE)GetGValue(cr) * 0.59) + ((DOUBLE)GetBValue(cr) * 0.11)); pdc_grey2.SetPixel( x, y, RGB(val,val, val)); } } Invalidate(TRUE); }Warum blos sind diese nur ganz kurz sichtbar???
-
Nimm mal CWindowDC oder CClientDC statt CPaintDC
-
Leider hat das genau den selben Mißerfolg gebracht.
Muß man den den DC irgendwo anders anfordern (in der OnPaint Methode oder so ???
MFG (Nobber)