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)


Anmelden zum Antworten