C# 加载缩放的位图

本文关键字:位图 缩放 加载 | 更新日期: 2023-09-27 18:19:56

我试图加载 n x n 图像,并通过将每个像素复制为 m x m 来制作 nm x nm。我的意思是:如果图像是:

1 2
3 4

m 为 2,因此新图像将是

1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4

到目前为止,我只是做了显而易见的方式:

Bitmap scaledImage = new Bitmap(image.Width * BeadWidth, image.Height * BeadHeight);
  for (int w = 0; w < scaledImage.Width; ++w) {
      for (int h = 0; h < scaledImage.Height; ++h) {
          scaledImage.SetPixel(w, h, image.GetPixel(w / BeadWidth, h / BeadHeight));
     }
  }

但这需要这么长时间。我怎样才能在更快的时间内获得相同的结果?

C# 加载缩放的位图

DrawImage(Image, Int32, Int32, Int32, Int32(
在指定位置以指定大小绘制指定的图像。

Bitmap bmp = new Bitmap(width*2, height*2);
Graphics graph = Graphics.FromImage(bmp);
graph.InterpolationMode = InterpolationMode.High;
graph.CompositingQuality = CompositingQuality.HighQuality;
graph.SmoothingMode = SmoothingMode.AntiAlias;
graph.DrawImage(image, new Rectangle(0, 0, width*2, height*2));

虽然这将是高质量的,但我认为他实际上并不想要 抗锯齿的插值结果。如果是这样,正确的 设置将是:

graph.InterpolationMode = InterpolationMode.NearestNeighbor; 
graph.SmoothingMode = SmoothingMode.None;

只需使用以下位图构造函数(图像、Int32、Int32(重载即可实现这一点,如下所示

var scaledImage = new Bitmap(image, image.Width * BeadWidth, image.Height * BeadHeight);