2012-01-28 6 views
0

私はBitmapが256色のインデックス形式であるため、サイズを変更して新しいBitmapを24ビットRGB形式で作成し、Graphicsオブジェクトを使用して描画します。インデックス付きカラービットマップからグラフィックスオブジェクトを作成することはできません。C#リサイズインデックス付きカラービットマップと色を維持

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(); 

これは動作しますが、固体の色は今粗くであり、他の色の画素が含まれています。私はそのように私はこのようなインデックスカラーに変換するFormatConvertedBitmapを使用してインデックスカラーフォーマットとして戻ってリサイズした画像を保存する必要があります。インデックス付きのカラーイメージのサイズを変更する方法や、ソリッドカラーを維持する方法がありますか?

答えて

1

はい、これはかなり避けられません。これに影響を与えるためにコントロールしたいコアプロパティは、Graphics.InterpolationModeです。 Bicubicのような高品質の選択は、サイズ変更されたイメージに多くの色を追加します。それを256色に戻すと、粒状の画像が生成されます。代わりにNearestNeighborを使用して、追加された色の数を減らすことができますが、最終的にはぼんやりした画像になります。

GIFエンコーダを試してみると、イメージを256色に再サンプリングする必要があります。ディザリングアルゴリズムを使用します。しかし、画像に青い空のような似たような色の広い領域がある場合に目立つような珍しい人工物を生成する傾向があります。単に再サンプリングしない以外に魔法の治療法はありません。最近私たちが持っている素敵なハードウェアでそれをすることには意味がありません。

関連する問題