GDI+ を使用して C++ CWnd ウィンドウに JPG を表示しています。JPG の背景は 0xffffff の真っ白ですが、graphics.DrawImage を使用して表示すると、背景はオフホワイトで、0xfff7f7、0xf7fff7、0xf7f7f7 などのピクセル カラーが混在しています。以下はコードです。CompositingMode、SmoothingMode などのさまざまな設定を試しました。画像はスケーリングされません。
奇妙なことに、画像内の他の白以外のコンテンツによって背景色が異なります。単純なすべて白の JPG を作成すると、それは機能します。または、黒のテキストだけを含むほぼ白の JPG でも機能します。画像の比較を以下に示します。
CClientDC dc(this);
Gdiplus::Graphics graphics(dc);
Gdiplus::Bitmap* bmp = Gdiplus::Bitmap::FromFile( L"c:\\test.jpg" );
graphics.SetInterpolationMode(Gdiplus::InterpolationModeHighQuality);
//graphics.SetCompositingQuality(Gdiplus::CompositingQualityHighQuality);
graphics.SetCompositingQuality(Gdiplus::CompositingQualityDefault);
graphics.SetCompositingMode(Gdiplus::CompositingModeSourceCopy);
//graphics.SetSmoothingMode( Gdiplus::SmoothingMode::SmoothingModeDefault );
graphics.DrawImage(bmp, 0, 0, bmp->GetWidth(), bmp->GetHeight() );
ここでは、画像の左側にのみテキストといくつかのブレンディングがあります (アルファなし、これは JPG) 。右側はすべて真っ白です。背景がすべて灰色になっていることがわかります。
ここで、内部コンテンツの削除を開始しました (左側のみ)。ある時点の後、背景全体が白く表示され始めます。???
画像領域の大部分を削除する限り、白が表示される前に画像領域のどの部分を削除しても問題ありません。png についても同様です。
これが元のtest.jpg画像です...