Как получить Bitsperpixel из растрового изображения
У меня есть сторонний компонент, который требует от меня передать бит-пиксель из растрового изображения.
Какой лучший способ получить "бит на пиксель"?
Моя начальная точка - следующий пустой метод: -
public int GetBitsPerPixelMethod( system.drawing.bitmap bitmap )
{
//return BitsPerPixel;
}
Ответы
Ответ 1
Используйте свойство Pixelformat, это возвращает Pixelformat enumeration, который может иметь такие значения, как fe 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;
}
Ответ 2
Вместо создания вашей собственной функции я бы предложил использовать эту существующую функцию в рамках:
Image.GetPixelFormatSize(bitmap.PixelFormat)
Ответ 3
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
Ответ 4
Try:
Bitmap.PixelFormat
Смотрите возможные значения свойства PixelFormat.
Ответ 5
Как насчет Image.GetPixelFormatSize()?
Ответ 6
Свойство 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];