我之前写过一个图像放大算法,它通过将图像大小加倍并将单个像素变成新图像上的四个像素来放大图像而不会模糊。这最初是为 500x500 像素的图像构建的,它工作得非常好,但现在我需要将它用于具有不同宽度和高度的图像。
我尝试过更改值,但无法使其正常工作,并且可能缺少某些内容,但我不知道。有人可以帮助解决这个问题,以便它适用于不同的尺寸吗?它是为放大 500x500 像素的图像而构建的,但我需要放大的图像是 634x490 像素。
下面是适用于 500x500 的原始代码,如果您将其粘贴到项目中并运行它,这将起作用,但您必须为其提供 500x500 像素的图像:
Bitmap oldImg = new Bitmap(Image.FromFile(@"NameOfImageToEnlarge.png"));
Bitmap newImg = new Bitmap(1000, 1000);
System.Drawing.Imaging.BitmapData data = oldImg.LockBits(new Rectangle(0, 0, 500, 500), System.Drawing.Imaging.ImageLockMode.ReadOnly, oldImg.PixelFormat);
oldImg.UnlockBits(data);
byte[] rgba = new byte[data.Stride * 500];
System.Runtime.InteropServices.Marshal.Copy(data.Scan0, rgba, 0, data.Stride * 500);
using (Graphics g = Graphics.FromImage(newImg))
{
for (int x = 0; x < 500; x++)
{
for (int y = 0; y < 500; y++)
{
newImg.SetPixel(x * 2, y * 2, Color.FromArgb(oldImg.GetPixel(x, y).ToArgb()));
newImg.SetPixel(x * 2 + 1, y * 2, Color.FromArgb(oldImg.GetPixel(x, y).ToArgb()));
newImg.SetPixel(x * 2, y * 2 + 1, Color.FromArgb(oldImg.GetPixel(x, y).ToArgb()));
newImg.SetPixel(x * 2 + 1, y * 2 + 1, Color.FromArgb(oldImg.GetPixel(x, y).ToArgb()));
}
}
newImg.Save(@"NameOfImageToSave.png");
}
我还使用了一些帮助来使上面的代码正常工作,因此我可能在此处进行了更多解释:从一张图像中获取像素并在新图像上将它们放大以创建更大版本的原始图像