소프트웨어/C# & ASP.NET

C#으로 이미지 리사이즈/조작 시 부드럽게 렌더링 하기

falconer 2008. 9. 4. 19:48
간단한 팁.
C#에서 GDI+의 Graphics 오브젝트를 사용해서 렌더링을 할 때 사이즈 변경 등의 변형이 일어나면 들쭉날쭉한 도트가 심해지는 현상이 있는데요, 간단하게 InterpolationMode를 설정하여 렌더링 방식을 선택할 수 있네요.

Image img = Image.FromFile("a.jpg");

using (Bitmap bitmap = new Bitmap(img.Width, img.Height))

{

using (Graphics g = Graphics.FromImage(bitmap))

{

        // 드로잉 모드

        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

        // 메모리에 렌더링

        g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));

// 파일 저장

        bitmap.Save("a.png");

}

}

내친김에 간단한 윈폼 프로젝트를 하나 만들어서 각 모드별 차이점을 찾아봤어요.


이미지를 선택하면 무조건 200 x 200 사이즈로 렌더링 하는데요, 각 모드별로 걸리는 시간도 함께 표시했어요.


각 모드별로 구분이 확실히 되죠? High...시리즈가 확실히 품질이 더 좋지만 리사이즈에 시간이 훨씬 더 걸리죠.


InterpolationMode는 텍스트나 직선이 많이 들어갈 때 더 확실히 차이가 나는데요, High...시리즈는 흐릿하지만 어느 정도 글자를 읽을 수 있게 되죠.


대용량 사진으로 테스트. 가장 시간이 많이 걸리는건 HighQualityBilinear 방식이고요, 계산을 더 할 수록 이미지가 부드러워지는 혹은 흐려지는 경향이 있네요. HighQualityBilinear는 원본 이미지가 너무 뭉개지는 감이 있고요, HighQualityBicubic이 적당해 보여요.

특히 Deepzoom을 사용할 때에는 이미지가 가급적 부드러운 쪽이 더 자연스러운 확대축소 효과를 보여주게 되므로 혹시 Deepzoom을 위한 이미지를 코드로 리사이즈 한다면 부드러우면서도 약간이나마 더 빠른 HighQualityBicubic쪽을 추천해요.


출처: http://gongdo.tistory.com/