2011-04-20 4 views
8

이 문장의 의미는 무엇입니까?비트 맵 보폭 및 4 바이트 관계?

Stride 속성은 한 행의 너비를 바이트 단위로 유지합니다. 그러나 효율성을 위해 시스템은 4 바이트 경계에서 시작하여 4 바이트의 배수로 패딩 된 행에 데이터가 채워지도록하기 때문에 행의 크기는 픽셀 크기의 정확한 배수가 아닐 수 있습니다.

+0

[C#을 scan0와 보폭]의 중복 가능성 (http://stackoverflow.com/questions/5691955/c-scan0-and-stride는) –

+0

덕분에 유용한 ... –

답변

5

걸음이 쌓입니다. 즉, (8 비트 그레이 가정, 또는 픽셀 당 8 비트)가 4 의 가장 가까운 배수로 반올림됩니다 것을 의미합니다 :

Width | stride 
-------------- 
1  | 4 
2  | 4 
3  | 4 
4  | 4 
5  | 8 
6  | 8 
7  | 8 
8  | 8 
9  | 12 
10 | 12 
11 | 12 
12 | 12 

C#에서,이 같은이를 구현할 수 :

static int PaddedRowWidth(int bitsPerPixel, int w, int padToNBytes) 
{ 
    if (padToNBytes == 0) 
     throw new ArgumentOutOfRangeException("padToNBytes", "pad value must be greater than 0."); 
    int padBits = 8* padToNBytes; 
    return ((w * bitsPerPixel + (padBits-1))/padBits) * padToNBytes; 
} 

static int RowStride(int bitsPerPixel, int width) { return PaddedRowWidth(bitsPerPixel, width, 4); } 
8

즉, 이미지 너비가 17 픽셀이고 색상이 3 바이트이면 51 바이트가됩니다. 따라서 이미지 너비 (바이트)는 51 바이트이고 스트라이드는 52 바이트입니다.이 너비는 다음 4 바이트 경계로 반올림 된 이미지 너비입니다.

+0

는 보폭은 4 항상 승수 ? –

4

제가 예를 들어 보겠습니다 :

이 폭이 160 인 경우, 보폭이 160 수 있다는 것을 의미하지만 폭이 (161)의 경우, 다음 걸음이 될 것이다 (164)

+0

은 항상 4의 배수입니까? –

+0

예. 이것은 Windows 비트 맵 일입니다. OpenCV를 사용하면 큰 걸음도 없습니다. – Aliostad