0

みんな私はc++コードをc#に変換しようとしています。ビットマップ画像を圧縮しているこのコード。私のC ++コードはBITMAPINFOHEADER
を使用してビットマップ画像のbiBitCountを読み取ります.C#で画像のビット数を取得するにはどうすればよいですか(win app)?これはC++コードです

char *pTemp; //image data will store here
BITMAPINFOHEADER *pbminfo;
pbminfo = (BITMAPINFOHEADER *)pTemp;
if ( pbminfo->biBitCount != 1 ) // Convert 24 bit -> 1 bit 
{
     //some process will be done here
}
4

2 に答える 2

0

次のことを試すことができます。

using System.Drawing;

public class TestThis
{
    public void Test()
    {
        Image myImage = Image.FromFile("Myfile.png");

        int bitDepth = Image.GetPixelFormatSize(myImage.PixelFormat);

        if( bitDepth != 1)
        {
            // Do domething
        }
    }
}
于 2012-09-01T11:52:15.567 に答える
0

実際、Visual C++/CLI でラッパー クラスを作成することもできますが、やりたいことはすべて、C# だけを使用して完全に実行できます。

PixelFormatImageのプロパティを使用できます。さまざまな可能な値があります。

ピクセル形式は、データの 1 ピクセルに関連付けられたメモリのビット数を定義します。この形式は、データの 1 ピクセル内の色成分の順序も定義します。

PixelFormat48bppRGB、PixelFormat64bppARGB、および PixelFormat64bppPARGB は、カラー コンポーネント (チャネル) ごとに 16 ビットを使用します。GDI+ バージョン 1.0 および 1.1 は、チャネルあたり 16 ビットのイメージを読み取ることができますが、そのようなイメージは、処理、表示、および保存のためにチャネルあたり 8 ビットの形式に変換されます。各 16 ビット カラー チャネルは、0 ~ 2^13 の範囲の値を保持できます。

一部のピクセル形式には、事前に乗算されたカラー値が含まれています。Premultiplied とは、カラー値にアルファ値がすでに乗算されていることを意味します。

var image = new Bitmap(@"C:\temp\me.png");
if (image != null) {
    Console.Write("Format: {0}", image.PixelFormat.ToString("G"));
}

私の場合の結果は次のようになりますFormat32bppArgb

于 2012-09-01T11:25:47.170 に答える