我的图像在磁盘上保存为64x64的大小。我使用以下代码加载图像:
resizeImage(Image.FromFile(@"C:\Users\ApachePilotMPE\Desktop\" + "img.png"), new Size(128, 128))
返回一个像这样的图像转换的位图:
public static Image resizeImage(Image i, Size newSize)
{
return (Image)(new Bitmap(i, newSize));
}
当我在图像上绘制图像时,图像中对象的两侧(只有黑色和白色棒图,具有透明背景)看起来好像已被抗锯齿以与背景混合。有没有办法防止这种情况发生?我尝试在运行时将Graphics.SmoothingMode
设置为None
,但这似乎没有任何效果。
上图:装入尺寸为64并增加到128时的彩绘图像。
左下:在128处加载时绘制的图像。
右下角:Edited-In Image,使用Paint.NET调整大小,大小为128。
要指定:顶部图像应该看起来像左下角。
修改
检查帖子顶部的更新代码。
答案 0 :(得分:1)
return (Image)(new Bitmap(i, newSize));
您正在让Bitmap构造函数调整图像大小。它会选择一个好的"插值模式,试图避免像素大四倍的块状外观。然而,您更喜欢块状外观,这意味着您必须自己控制插值模式。像这样:
public static Image ResizeImage(Image img, Size size) {
var bmp = new Bitmap(size.Width, size.Height);
using (var gr = Graphics.FromImage(bmp)) {
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
gr.DrawImage(img, new Rectangle(Point.Empty, size));
}
return bmp;
}
另请注意,您可能更喜欢插入gr.Clear(Color.White)时获得的外观;在该代码内部而不是更改InterpolationMode。这避免了原始图像中具有笨拙RGB值的透明像素的问题。