2012-01-28 2 views
0

나는 256 색 색인 형식으로 된 Bitmap을 가지고 있으므로 크기를 조정해야합니다. 따라서 Bitmap을 24 비트 RGB 형식으로 만들고 Graphics 개체를 사용하여 그립니다. 색인 된 색상 비트 맵에서 그래픽 객체를 만들 수 없습니다. 나는 다음과 같이 인덱스 색상으로 변환 다시 인덱스 색상 형식으로 내가 FormatConvertedBitmap을 사용하여 크기가 조정 된 이미지를 저장해야합니다색인화 된 색상 비트 맵 크기 조정 및 색상 유지

BitmapSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); 
FormatConvertedBitmap converted = new FormatConvertedBitmap(); 
converted.BeginInit(); 
converted.Source = bitmapSource; 
converted.DestinationFormat = System.Windows.Media.PixelFormats.Indexed8; 
converted.DestinationPalette = new BitmapPalette(bitmapSource, 256); 
converted.EndInit(); 

이 작동하지만 단색 지금은 거친이며, 다른 색상의 픽셀을 포함한다. 인덱스 된 색상 이미지의 크기를 조정하거나 단색을 유지하는 더 좋은 방법이 있습니까?

답변

1

네, 꽤 피할 수없는 일입니다. 여기에 영향을 주도록 제어하려는 핵심 속성은 Graphics.InterpolationMode입니다. Bicubic과 같은 고품질 선택은 크기가 조정 된 이미지에 많은 색상을 추가합니다. 256 색으로 다시 채우려 고 시도하면 낟알 모양의 이미지가 생성됩니다. 당신은 추가 된 색상의 수를 줄이기 위해 NearestNeighbor를 대신 사용할 수 있지만, 뭉툭한 이미지로 끝날 것입니다.

GIF 인코더를 사용해 볼 수도 있지만 이미지를 다시 256 색으로 리샘플링해야합니다. 디더링 알고리즘을 사용합니다. 그러나 이미지에 푸른 하늘 같은 비슷한 색상의 넓은 영역이있을 때 눈에 띄게되는 비정상적인 인공물을 만드는 경향이 있습니다. 단순히 리샘플링하지 않는 것 이상의 마법 치료법은 없습니다. 우리가 요즘 가지고있는 멋진 하드웨어로 그렇게 할 필요가 없습니다.