C#加载缩放位图

时间:2015-10-31 10:19:17

标签: c# bitmap

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

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));
     }
  }

但需要很长时间。 如何在更快的时间内获得相同的结果?

2 个答案:

答案 0 :(得分:2)

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;

答案 1 :(得分:0)

您可以通过简单地使用以下Bitmap Constructor (Image, Int32, Int32)重载来实现这一点

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