0

リソース ファイルに 8 bpp PNG を追加します。使用しようとすると、次のようになります。

Bitmap bmp = properties.Resources.My8bppImage;

bmp PixelFormat は 32 ARGB になります。しかし、それは間違っています。インデックスは 8 bpp である必要があります。正しいビットマップを取得するには?

4

1 に答える 1

2

ここには多くのオプションはありません。Visual Studio リソース エディターと Bitmap クラスの両方が、画像を 32bpp に変換する PNG デコーダーを使用します。これは役立つことを意図しており、32bpp は素晴らしく迅速にレンダリングされます。

フォールバック オプションは、System.Windows.Media.Imaging.PngBitmapDecoder クラスを使用することです。BitmapCreateOptions.PreservePixelFormat オプションを渡して、強制的に 8bpp 形式を維持することができます。最初に名前を.binファイルに変更することで、pngをリソースとして追加できるため、画像ファイルとして解釈しようとせず、バイト[]にします。次に、次のようなコードが機能します。

using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.IO;
...
        Stream stream = new MemoryStream(Properties.Resources.marble8);
        PngBitmapDecoder decoder = new PngBitmapDecoder(stream, 
            BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
        BitmapSource bitmapSource = decoder.Frames[0];

「marble8」は私が使用したテスト画像でしたが、自分のものに置き換えてください。WindowsBase および PresentationCore アセンブリへの参照を追加する必要があります。

于 2012-04-02T20:54:40.337 に答える