之前用GDI+做图片旋转,发现图片旋转后会漂移,偏离原中心位置几个像素。
后来发现用GDI+的InterpolationModeHighQualityBicubic高质量模式去缩放或者拉伸图片时,可能会出现边缘少几个像素或者黑边问题。
解决方法:
Gdiplus::Bitmap dstBmp(nCW, nCH);
Gdiplus::Graphics gdip(&dstBmp);
gdip.SetInterpolationMode(Gdiplus::InterpolationModeHighQualityBicubic);
gdip.SetPixelOffsetMode(Gdiplus::PixelOffsetModeHalf);
Gdiplus::ImageAttributes imgAttr;
imgAttr.SetWrapMode(Gdiplus::WrapModeTileFlipXY);
Gdiplus::Rect rect(0, 0, nCW, nCH);
gdip.DrawImage(pSrcBmp, rect,0,0,pSrcBmp->GetWidth(),pSrcBmp->GetHeight(),Gdiplus::UnitPixel,&imgAttr);
通过设置SetInterpolationMode为InterpolationModeHighQualityBicubic,设置SetPixelOffsetMode为PixelOffsetModeHalf,设置ImageAttributes的SetWrapMode为WrapModeTileFlipXY,经过验证可以解决。
其实黑边问题如果对图像质量要求不那么高,可以设置SetInterpolationMode为InterpolationModeNearestNeighbor,设置SetPixelOffsetMode为PixelOffsetModeNone,应该也能解决。
主要参考:http://webserver2.tecgraf.puc-rio.br/~scuri/gdiplus/drawimage_scale_problem.html
另一种思路放大缩小:https://blog.csdn.net/tianmuxia/article/details/38593349