我正在使用 GDI+ 在 C++ CWnd 窗口中显示 JPG。JPG 具有纯白色背景,0xffffff,但是当使用 graphics.DrawImage 显示时,背景是灰白色的,混合了像素颜色,例如 0xfff7f7、0xf7fff7、0xf7f7f7。下面是代码,我尝试了CompositingMode、SmoothingMode等各种设置,图片没有缩放。
奇怪的是,背景颜色会根据图像中的其他非白色内容而有所不同。如果我制作一个简单的全白 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() );
在这里,我仅在图像的左侧有文本和一些混合(没有 alphas,这是 JPG)。右边的一切都是纯白色的。你可以看到背景都是灰色的。
在这里,我开始删除内部内容(仅在左侧)。在某个点之后,整个背景开始显示为白色。???
在图像区域开始显示白色之前删除图像区域的哪一部分并不重要,只要我删除它的大部分即可。pngs也是如此。
这是原始 test.jpg 图像...