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쪽을
추천해요.
'소프트웨어 > C# & ASP.NET' 카테고리의 다른 글
.NET Enterprise Services 성능 (0) | 2008.09.05 |
---|---|
.NET의 Enterprise Service(COM+) 이해 (0) | 2008.09.05 |
ASP.NET 2개 폼 사용하는 꽁수 (0) | 2008.08.28 |
하나의 클래스를 통째로 넘기는 방법 ( a.aspx.cs -> b.aspx.cs ) (0) | 2008.08.28 |
숫자 -> 한글 표기 ( Microsoft Visual Studio International Pack 1.0 ) (0) | 2008.08.28 |