Thursday, April 2, 2015

C# PNG 이미지 확대 에러

PNG이미지를 Image 포맷으로 읽을경우 자체적으로 생성한 Bitmap과 Resolution이 달라서 이미지 복사할 경우에 의도치 않은 이미지 확대가 일어나는 경우가 있다.

다음은 그러한 경우이다.
아래와 같이 똑같은 크기로 이미지를 생성하고 복사를 하여도 이미지는 확대가 되어 복사가 된다.
            Image image = ToolManager.rawRenderer_.pictureBoxRaw.Image;
            Bitmap frameBitmap = new Bitmap(image.Width, image.Height);
            Graphics g = Graphics.FromImage(frameBitmap);
            g.Clear(Color.White);
            g.DrawImage(image, 0, 0, new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);

이유를 살펴보았더니 VerticalResolution, HorizontalResolution이 image의 값과 frameBitmap의 값이 서로 75, 96으로 달라서 발생했다. 이는 PNG이미지의 경우 resolution이 75인 파일도 있고 96인 파일도  있어서 그렇다.

그래서 아래와 같이 resolution을 frameBitmap쪽으로 통일을 시키면 DrawImage시 안전하게 확대가 일어나지 않고 복사할수 있다.
            Bitmap imageBitmap = image as Bitmap;
            imageBitmap.SetResolution(frameBitmap.HorizontalResolution, frameBitmap.VerticalResolution);


No comments:

Post a Comment