我正在尝试制作一个图像放大器,它需要500x500像素的图像并输出一个完全相同且没有失真的1000x1000像素图像。我想让它像这样工作:对于原始图像中的每个像素,它应该将该像素的相同颜色的4个像素添加到新图像中并对每个像素重复。因此原始中的一个像素在新的像素中变为4个像素(正方形中的4个像素)。我试图做到这一点,但我不能让它正常工作。到目前为止,我已经写了这个,但它只是在角落里的1000x1000像素图像上输出相同大小的图像:
Bitmap oldImg = new Bitmap(Image.FromFile(@"C:\ServerSystem\Testing\20140127T154500.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, y, Color.FromArgb(oldImg.GetPixel(x, y).ToArgb()));
newImg.SetPixel(x + 1, y, Color.FromArgb(oldImg.GetPixel(x, y).ToArgb()));
newImg.SetPixel(x, y + 1, Color.FromArgb(oldImg.GetPixel(x, y).ToArgb()));
newImg.SetPixel(x + 1, y + 1, Color.FromArgb(oldImg.GetPixel(x, y).ToArgb()));
}
}
newImg.Save(@"C:\ServerSystem\Testing\20140127T154500HIRES.png");
}
如何让它正常工作并让它创建4个像素?谢谢
答案 0 :(得分:1)
因为你只想把它变成两倍大,所以你几乎就在那里。 所有你需要做的就是:
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()));
}
}