이전에 이미지 크기를 두 배로 늘리고 단일 픽셀을 네 픽셀로 만드는 이미지 흐림없이 이미지를 확대하는 알고리즘을 작성했습니다 새로운 이미지. 이것은 원래 500x500 픽셀 이미지 용으로 제작되었으며 완전히 잘 작동했지만 이제는 너비와 높이가 다른 이미지에 사용해야합니다.하나의 픽셀을 취하여 크기가 다른 새 이미지에서 4 개로 바꾸어 흐림없이 이미지 확대
값을 변경하려고 시도했지만 작동하지 못하고 누락 된 부분이 있지만 잘 모르겠습니다. 다른 사람이이를 수정하여 다른 차원에서 작동하도록 할 수 있습니까? 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");
}
가 나는 또한 도움을 사용 위의 코드를 사용하면 더 자세히 설명 할 수 있습니다. Taking pixels from one image and enlarging them on a new image to create a larger version of original
고맙습니다! 메모리가 더 좋게 들리는 짧은 코드와 출력 할 이미지의 너비와 높이를 변경하는 것만으로 간단합니다. 다시 한 번 감사드립니다. –