2011-04-20 13 views
8

Cuál es qué significa esta frase:Paso de mapa de bits y 4 bytes ¿Relación?

La propiedad de zancada, mantiene la anchura de una fila en bytes. Sin embargo, el tamaño de una fila puede no ser un múltiplo exacto del tamaño de píxel porque, para mayor eficiencia, el sistema garantiza que los datos se empacan en filas que comienzan en un límite de cuatro bytes y se rellenan en un múltiplo de cuatro bytes.

+0

posible duplicado de [C# scan0 y zancada] (http://stackoverflow.com/questions/5691955/c-scan0-and-stride) –

+0

gracias útil ... –

Respuesta

5

Stride está acolchado. Eso significa que se redondea al múltiplo más cercano de 4. (suponiendo 8 bits de color gris, u 8 bits por píxel):

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 

etc.

en C#, es posible implementar esta como esta :

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

Eso significa que si el ancho de su imagen es de 17 píxeles y con 3 bytes para el color, obtendrá 51 bytes. Entonces, el ancho de su imagen en bytes es de 51 bytes, luego la zancada es de 52 bytes, que es el ancho de la imagen en bytes redondeado al siguiente límite de 4 bytes.

+0

es zancada siempre multiplicador de 4 ? –

4

Déjeme darle un ejemplo:

Esto significa que si el ancho es de 160, paso será 160. Pero si el ancho es 161, a continuación, paso será 164.

+0

es siempre un factor multiplicador de 4? –

+0

Sí. Esto es un bitmap de Windows. Si usas OpenCV, no tiene una zancada. – Aliostad

Cuestiones relacionadas