1

我正在使用以下代码在 C 中使用 GDI+ 调整位图的大小。即使对于该区域应该是白色的图像,我也会获得顶部边缘的灰度值。当插值是最近邻时,问题就消失了。但是,我尝试使用 ImageMagick 进行双三次插值,看起来还不错。我应该知道的任何限制问题?我的缩放方法在某种程度上是错误的吗?谢谢!

(输入:destSize:目标 Gdiplus::Size m_pBitmap:源位图)

Rect destRect(Point(0,0), destSize);
Bitmap *pBitmap24BPP =  new Bitmap(destSize.Width, destSize.Height, PixelFormat24bppRGB);
pBitmap24BPP->SetResolution(m_pBitmap->GetHorizontalResolution(), m_pBitmap->GetVerticalResolution());  
Graphics *pGraphics = Graphics::FromImage(pBitmap24BPP);
pGraphics->SetInterpolationMode(InterpolationModeHighQualityBilinear);
pGraphics->DrawImage(m_pBitmap, destRect, 0, 0, m_pBitmap->GetWidth(), m_pBitmap->GetHeight()   , UnitPixel, NULL);

//cleanup
4

1 回答 1

1

我一直在看到类似的事情。我没有时间研究它,但我有一种感觉,这是因为 GDI+ 图像调整器错误地使用了“远离顶部边缘”的像素值,这将全为零 - 使其变黑。

正确调整图像大小应该识别您已经到达图像的边缘,并适当地处理它。

于 2010-04-15T01:54:34.797 回答