2009-07-14 4 views
19

비트 맵에서 비트 퍼 픽셀을 제공해야하는 타사 구성 요소가 있습니다.비트 맵에서 Bitsperpixel을 얻는 방법

"픽셀 당 비트 수"를 얻는 가장 좋은 방법은 무엇입니까?

나의 출발점은 다음 빈 방법 : -

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

답변

1

Pixelformat property를 사용, 이것은 Pixelformat enumeration는 f.e. 같은 값을 가질 수있는 반환 분명히 픽셀 당 24 비트 Format24bppRgb, 그래서 당신은 같은 것을 할 수 있어야한다 :

switch(Pixelformat)  
    { 
    ... 
    case Format8bppIndexed: 
     BitsPerPixel = 8; 
     break; 
    case Format24bppRgb: 
     BitsPerPixel = 24; 
     break; 
    case Format32bppArgb: 
    case Format32bppPArgb: 
    ... 
     BitsPerPixel = 32; 
     break; 
    default: 
     BitsPerPixel = 0; 
     break;  
} 
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]; 
1

Image.GetPixelFormatSize()는 어떻게됩니까?

73

오히려 자신의 함수를 만드는 것보다, 내가 틀이 기존 기능을 사용하는 것이 좋습니다 것 :

Image.GetPixelFormatSize(bitmap.PixelFormat) 
+6

이것은이 질문에 대한 대답으로 받아 들여야합니다 –

+1

이것은 답변 일뿐입니다. 공유해 주셔서 감사합니다. – datoml

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

+1

안녕하세요. 좋은 답변 : 테스트 가능한 코드 응답, 작동하기위한 명시된 가정 (.NET 버전) 및 설명서 링크. 당신은 아마도 질문에 제공된 기존의'bitmap' 변수/function-argument를 사용했을 것입니다. 그러나 대답에 새로운 인수 ('source')를 만드는 것이 좋습니다. – poplitea

관련 문제