调整大小(8 * 7 px)Bitmapimage为800 x 700

时间:2015-04-27 11:48:39

标签: c# transform bitmapimage

我创建了大约100 png8*7 pixels个文件,它们包含很小的面孔。

我想在WPF Image中显示其中一个面,为此,我创建了一个Bitmapimage(使用Stretch.Fill选项)并将png放入它的urisource,然后我使用bitmapimage作为图像源。

你可以想象,它看起来有点奇怪,我想做的就是获得更大的画面,而不是改变任何像素(比如当你使用Windows图像浏览器并放大它时,没有质量)丢失和像素不会改变,这意味着你不会失去图像的形状和颜色)

我确定可以"zoom"进入我的8*7px图片,或复制这些像素并再次绘制,但更大。

我真的很抱歉我的英语不好,我仍然希望你能理解我并且能够提供帮助。

非常感谢你,没有什么可说的了。

1 个答案:

答案 0 :(得分:0)

我认为生成的图像看起来相当模糊。原因不是质量的“损失” - 而是推断出原始图像中不存在的细节。对于照片和类似图像,使用一些平滑插值通常是一个更好的主意,这就是WPF所做的。

我不确定在WPF中是否有更好的方法(可能),但您可以手动创建一个新的位图,而不需要像这样的平滑插值:

var src = new Bitmap("D:\\Untitled.png");
var dst = new Bitmap(800, 700);

using (var gr = Graphics.FromImage(dst))
{
  gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
  gr.DrawImage(src, new Rectangle(0, 0, 800, 700));
}

dst.Dump();

dst变量将使用“最近邻居”插值调整大小的位图 - “像素化”外观。

修改

WPF原生方式是使用RenderOptions.BitmapScalingMode="NearestNeighbor"。如果您是动态创建图像,那么当然对应于RenderOptions.SetBitmapScalingMode(bmp, BitmapScalingMode.NearestNeighbor)