我想使用此函数裁剪位图,但位图可能比裁剪区域小,所以我想在这种情况下让位图更大。
例如,我有一个200x250的位图,如果我使用250x250的CropBitmap方法,则会出现内存不足错误。它应该返回一个250x250的位图,其中缺少的左侧50px用白色填充。
我怎样才能做到这一点?
public Bitmap CropBitmap(Bitmap bitmap, int cropX, int cropY, int cropWidth, int cropHeight)
{
var rect = new Rectangle(cropX, cropY, cropWidth, cropHeight);
if(bitmap.Width < cropWidth || bitmap.Height < cropHeight)
{
// what now?
}
return bitmap.Clone(rect, bitmap.PixelFormat);
}
答案 0 :(得分:3)
创建具有适当大小的新位图。然后获取System.Drawing.Graphics
并使用它来创建白色区域并插入源图像。像这样:
if (bitmap.Width < cropWidth && bitmap.Height < cropHeight)
{
Bitmap newImage = new Bitmap(cropWidth, cropHeight, bitmap.PixelFormat);
using (Graphics g = Graphics.FromImage(newImage))
{
// fill target image with white color
g.FillRectangle(Brushes.White, 0, 0, cropWidth, cropHeight);
// place source image inside the target image
var dstX = cropWidth - bitmap.Width;
var dstY = cropHeight - bitmap.Height;
g.DrawImage(bitmap, dstX, dstY);
}
return newImage;
}
请注意,我将外部||
表达式中的if
替换为&&
。要使其与||
一起使用,您必须计算源区域并使用another overload of Graphics.DrawImage