//이 기사는 www.blue1000.com 에 의해 번역되었으며 원래 주소는 http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx 입니다.
//타인의 노고의 결실을 존중하며, 전재시 출처를 밝혀주시기 바랍니다.
GDI+는 프로그램을 작성할 때 자주 사용됩니다. 어두운 32bpp 이미지를 gif 파일로 저장할 수 있으며 프로세스가 비교적 간단합니다. CreateThumnailImage 메서드를 사용하여 이 gif 이미지를 저장하기 전에 크기를 조정할 수도 있습니다.
일반적으로 사용되는 코드:
위의 코드는 gif 파일의 그리기 및 저장을 완료할 수 있지만 곧 문제를 발견하게 될 것입니다: 생성된 썸네일 .gif 파일의 이미지 품질은 우리 기대보다 훨씬 낮습니다.
효과 그림:
위에 표시된 저품질의 거친 이미지에도 "색상 양자화" 처리(팔레트화)가 필요합니다. 이는 GDI+가 이미지 자체의 실제 색상을 고려하지 않고 기본적으로 256색을 사용하기 때문에 발생합니다.
그 후 우리는 우리만의 "팔레트"를 만들려고 노력했지만 결과는 더욱 나빴습니다 :). 좋은 "색상 양자화" 알고리즘은 두 픽셀 입자 사이의 공간을 두 픽셀의 색상과 유사한 전환 색상으로 채워 더 많은 가시적 색상 공간을 제공하는 것을 고려해야 합니다.
이것이 "옥트리" 알고리즘입니다. "Octree" 알고리즘을 사용하면 자체 알고리즘을 연결하여 이미지를 양자화할 수 있습니다.
다음은 우리에게 도움이 될 수 있는 Microsoft의 두 가지 기사입니다. KB 319061 및 ASP.NET 이미지에 대한 색상 양자화 최적화 (Morgan Skinner, Microsoft 작성). Morgan Skinner는 참조용으로 다운로드할 수 있는 유용한 "Octree" 알고리즘 코드를 제공합니다.
OctreeQuantizer를 사용하는 것은 쉽습니다:
System.드로잉.Bitmap b = new System.드로잉.Bitmap(“c:\original_image.gif“);
System.드로잉.이미지 thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
OctreeQuantizer 양자화기 = 새로운 OctreeQuantizer(255, 8);
(비트맵 양자화 = 퀀타이저.Quantize(thmbnail)) 사용
{
yangized.Save(“c:\thumnail.gif“, System.드로잉.Imaging.ImageFormat.Gif);
}
OctreeQuantizer greyQuantizer = 새로운 GrayscaleQuantizer( );
( 비트맵 양자화 = greyQuantizer.Quantize ( thmbnail ) ) 사용
{
yangized.Save(“c:\thumnail.gif“, System.드로잉.Imaging.ImageFormat.Gif);
}
효과 그림은 다음과 같습니다(훨씬 더 아름답나요?).