如何从位图获取Bitsperpixel

时间:2009-07-14 17:54:18

标签: c# drawing

我有一个第三方组件,它要求我从位图中给它一个bitsperpixel。

获得“每像素位数”的最佳方法是什么?

我的出发点是以下空白方法: -

public int GetBitsPerPixelMethod( system.drawing.bitmap bitmap )
{
   //return BitsPerPixel;
}

6 个答案:

答案 0 :(得分:85)

我建议在框架中使用这个现有函数,而不是创建自己的函数:

Image.GetPixelFormatSize(bitmap.PixelFormat)

答案 1 :(得分:7)

var source = new BitmapImage(new System.Uri(pathToImageFile));
int bitsPerPixel = source.Format.BitsPerPixel;

上面的代码至少需要.NET 3.0

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx

答案 2 :(得分:3)

Image.GetPixelFormatSize()怎么样?

答案 3 :(得分:1)

使用Pixelformat property,会返回Pixelformat enumeration,其值可以是f.e. Format24bppRgb,显然是每像素24位,所以你应该可以这样做:

switch(Pixelformat)       
  {
     ...
     case Format8bppIndexed:
        BitsPerPixel = 8;
        break;
     case Format24bppRgb:
        BitsPerPixel = 24;
        break;
     case Format32bppArgb:
     case Format32bppPArgb:
     ...
        BitsPerPixel = 32;
        break;
     default:
        BitsPerPixel = 0;
        break;      
 }

答案 4 :(得分:1)

答案 5 :(得分:0)

Bitmap.PixelFormat属性将告诉您位图具有的像素格式的类型,从中可以推断出每个像素的位数。我不确定是否有更好的方法来获得这个,但至少天真的方式是这样的:

var bitsPerPixel = new Dictionary<PixelFormat,int>() {
    { PixelFormat.Format1bppIndexed, 1 },
    { PixelFormat.Format4bppIndexed, 4 },
    { PixelFormat.Format8bppIndexed, 8 },
    { PixelFormat.Format16bppRgb565, 16 }
    /* etc. */
};

return bitsPerPixel[bitmap.PixelFormat];