0

每个人我都在尝试将 c++ 代码转换为 c# 。压缩位图图像的这段代码。我的 c++ 代码使用 BITMAPINFOHEADER
读取位图图像的 biBitCount,我如何在 c#(win 应用程序)中获取图像的位数?这是 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# 来完成。

您可以使用PixelFormat图像的属性。它有多种可能的值

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

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.

于 2012-09-01T11:25:47.170 回答