VC++ 6 GetPixel

Hallo,
ich entwickle ein Programm mit MFC und habe ein Problem mit dem Befehl GetPixel und SetPixel von CDC. Der folgende Codeausschnitt funktioniert nicht so wie ich es erwarte:

CBildTransformationDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CDC * pDC=GetDC();
const double PI = 3.14159;
unsigned int NRows=(int)FreeImage_GetHeight(pDoc->m_handleFI);;
unsigned int NCols=(int)FreeImage_GetWidth(pDoc->m_handleFI);

for(unsigned int u=0; uGetPixel(x,y);

dct += f*cos(((2*x+1)*u*PI)/(2*NRows))*cos(((2*y+1)*v*PI)/(2*NCols));
}
}
int F=(NbyM*dct);
pDC->SetPixel(u,v,F);

}
}

und zwar die Variable f nimmt den Wert 4294967295 an und zwar egal bei welchem Bild. Das bedeutet, dass ich gar nicht den Farbwert bekomme, sondern was ganz anderes. Kann mir vielleicht jemand sagen, woran das liegt und wie ich das Problem beheben kann.

MfG
Lilia Hottmann

Du holst dir den pDC via GetDC()…
Ich weiß zwar nicht inwelchem zusammenhang das alles ist,
aber haste mal geschaut,
ob dein pDC auch wirklich auf dein Bild zeigt?
Was für ein Bild ist das denn?

Hallo Lilia,

ich entwickle ein Programm mit MFC und habe ein Problem mit
dem Befehl GetPixel und SetPixel von CDC. Der folgende
Codeausschnitt funktioniert nicht so wie ich es erwarte:

> CBildTransformationDoc\* pDoc = GetDocument();  
> ASSERT\_VALID(pDoc);  
>   
> CDC \* pDC=GetDC();

 **if ( pDC == NULL )  
 { /\*du hast hier schon ein Problem\*/ }**  



> const double PI = 3.14159;  
> unsigned int  
> NRows=(int)FreeImage\_GetHeight(pDoc-\>m\_handleFI);;  
> unsigned int  
> NCols=(int)FreeImage\_GetWidth(pDoc-\>m\_handleFI);  
>   
> for(unsigned int u=0; uGetPixel(x,y);  
>   
> dct +=  
> f\*cos(((2\*x+1)\*u\*PI)/(2\*NRows))\*cos(((2\*y+1)\*v\*PI)/(2\*NCols));  
> }  
> }  
> int F=(NbyM\*dct);  
> pDC-\>SetPixel(u,v,F);  
>   
> }  
> }

und zwar die Variable f nimmt den Wert 4294967295 an und zwar
egal bei welchem Bild. Das bedeutet, dass ich gar nicht den
Farbwert bekomme, sondern was ganz anderes. Kann mir
vielleicht jemand sagen, woran das liegt und wie ich das
Problem beheben kann.

Und das von Sebastian musst du auch noch beachten …
… zudem sollte das Fenster auch noch existieren, wenn du den Aufruf machst.

MfG Peter(TOO)

Hallo Lilia!

GetPixel( ) liefert den Datentyp COLORREF zurück, der eine Kombination aus den 8-Bit-Werten für Rot, Grün und Blau darstellt. Somit kann er nicht einfach in einer Multiplikation verwendet werden, so wie Du es Deinem Code-Auszug tust.
Mit dem 3 Makros GetRValue( ), GetGValue( ) und GetBValue( ) kriegst Du die RGB-Werte der einzelnen 3 Farben aus Deinem COLORREF-Wert. Damit kannst Du dann rechnen. Beim Zurückschreiben des Pixelwertes kannst Du den COLORREF-Wert wieder mit Hilfe des Makros RGB( ) aus den 3 Einzelwerten erzeugen.

Hoffe das hilft!

Grüße Safog

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]