C# 将(8*7像素)位图图像的大小调整为800 x 700

C# 将(8*7像素)位图图像的大小调整为800 x 700,c#,transform,bitmapimage,C#,Transform,Bitmapimage,我创建了大约100个png文件,这些文件的大小都是8*7像素,它们包含了微小的面 我想在WPF图像中显示其中一个面,为此,我创建了一个位图图像(使用Stretch.Fill选项)并将png放入其URI源,然后使用位图图像作为图像源 正如你所能想象的,它看起来有点奇怪,我所想做的就是得到一个更大的图片,而不是改变任何像素(比如当你使用windows image viewer并放大它时,没有质量损失,像素也没有改变,这意味着你不会失去图像的形状和颜色) 我确信有一种方法可以将“缩放”到我的8*7px

我创建了大约
100个png
文件,这些文件的大小都是
8*7像素
,它们包含了微小的面

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

正如你所能想象的,它看起来有点奇怪,我所想做的就是得到一个更大的图片,而不是改变任何像素(比如当你使用windows image viewer并放大它时,没有质量损失,像素也没有改变,这意味着你不会失去图像的形状和颜色)

我确信有一种方法可以将
“缩放”
到我的
8*7px
图片中,或者复制这些像素并再次绘制,但要更大一些

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


事先非常感谢,真的没什么可说的了。

我想结果图像看起来相当模糊。原因不是质量的“损失”,而是推断出原始图像中根本不存在的细节。对于照片和类似的图像,通常最好使用平滑插值,所以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本机方法是使用
渲染。BitmapScalingMode=“NearestNeighbor”
。如果您是动态创建图像,这对应于
RenderOptions.SetBitmapScalingMode(bmp,BitmapScalingMode.NearestNeighbork)
当然。

非常感谢,我马上就来试试