c ++ CIT中的BITMAPINFOHEADER biBitCount等价物

时间:2012-09-01 09:44:39

标签: c# c++ image-processing

我试图将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
}

2 个答案:

答案 0 :(得分:0)

你确实可以在Visual C ++ / CLI中编写一个包装类,但是你想要做的一切都是完全可行的,只需使用C#就可以了。

您可以使用图片的PixelFormat属性。它有各种各样的possible values

  

像素格式定义与一个数据像素相关联的存储器的位数。格式还定义了单个数据像素中颜色分量的顺序。

     

PixelFormat48bppRGB,PixelFormat64bppARGB和PixelFormat64bppPARGB每个颜色分量(通道)使用16位。 GDI +版本1.0和1.1可以读取每通道16位的图像,但是这样的图像被转换为​​每通道8位格式以进行处理,显示和保存。每个16位颜色通道可以保存0到2 ^ 13范围内的值。

     

某些像素格式包含预乘颜色值。预乘意味着颜色值已经乘以alpha值。

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

我的结果将是:Format32bppArgb

答案 1 :(得分: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
        }
    }
}