2

単純に .BMP ファイルをロードして、Bitmap オブジェクトを 24 ビット RGB 形式 (または RGB 形式の 32 ビット) で取得したいだけです。

私が試したすべてのメソッドは、PixelFormat = Format32bppArgb の Bitmap/Image オブジェクトを返します。もちろん、BMP にアルファがない場合でも。

new Bitmap(System.Drawing.Image.FromFile(fileName, true));
new Bitmap(fileName);

現在、最初のオブジェクトを24ビットRBGのメモリビットマップ内の別のオブジェクトにコピーすることで問題を解決しています。

それを行う単一の方法はありますか?

ありがとう

4

3 に答える 3

3

私が知る限り、System.Drawing のクラスを使用してビットマップをロードするための PixelFormat を指定することはできません。ビットマップを変換するには、この質問を確認してください: Converting Bitmap PixelFormats in C#

これは現在、そこでのトップの答えです:

        Bitmap orig = new Bitmap(@"c:\temp\24bpp.bmp");
        Bitmap clone = new Bitmap(orig.Width, orig.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
        using (Graphics gr = Graphics.FromImage(clone)) {
            gr.DrawImage(orig, new Rectangle(0, 0, clone.Width, clone.Height));
        }
        // Dispose orig as necessary..

1 つのオプションは、ファイル名と PixelFormat を取る関数にそれを入れることです。これは、おそらくそれほど効率的ではないという事実も隠しているため、浮き沈みのある醜いコードを隠しています。

リンクされたSOの質問によると、Cloneメソッドを使用すると常に機能するとは限りません。

于 2014-06-29T00:45:37.697 に答える
1

RGB形式のものにクローンすることができます:

var bitmapInRgbFormat = loadedBitmap.Clone(new Rectangle(0, 0, loadedBitmap.Width, loadedBitmap.Height), PixelFormat.Format32bppRgb)
于 2010-05-31T06:37:08.093 に答える
0

最初のオブジェクトを別のオブジェクトにコピーするとはどういう意味ですか?

イメージをロードして 24 ビットに変換するという目的を達成するには、サイズが一致し、RGB である 2 番目のビットマップのグラフィックス コンテキストを取得し、元のビットマップをこのビットマップにペイントします。

于 2010-05-30T23:06:25.800 に答える