我试图加载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));
}
}
但需要很长时间。 如何在更快的时间内获得相同的结果?
答案 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);