WPF WriteableBitmap 跨距

 

跨距也就是Stride,意思是圖像一行保存像素的字節數。

 

在寫入WriteableBitmap 【可寫位圖】時,通常會用到跨距這個數值。

 

這個數值的計算與可寫位圖的像素格式和像素寬度有關。

 

WriteableBitmap wb = new WriteableBitmap(800, 800, 96, 96,PixelFormats.Bgra32, BitmapPalettes.WebPaletteTransparent);

 

也就是和PixelFormats格式有關。

 

例如 Bgr32 即爲 每個像素佔32位,排序順序爲B R G A每個通道8位比特,也就是每個通道一個Byte(字節),四個通道共4字節。

 

所謂的跨距就是要保證這一行是整數,且能容下一整行像素是像素寬度的字節數,但是要保證爲4的倍數,且是向上舍入。

 

例如寬800,像素格式是Brga32,也就是4*800=3200字節數。

 

那麼這個3200就是跨距。

 

byte[] colorData = { color.B, color.G, color.R, color.A };
wb.WritePixels(new Int32Rect((int)p.X, (int)p.Y, 1, 1), colorData,3200, 0);

 

換句說,這個跨距是像素位寬*像素寬度的數值,不一定是最小,理論上3200是穩妥的,6400也是可以的,就是內存變大了。

 

換做格式爲Brg24,那麼則是像素位佔24位,每位8比特,共3字節。

 

理論跨距位 3*800=2400

 

但是像素寬度是 809;

 

跨距則是3*809=2427。注意,這裏要保證是4的倍數。

 

2427%4 的 商爲606,餘數爲3。不是4的倍數

 

此時的操作是向上加 1(代表加一個字節)即爲 4*606+3+4%3=2428,相上加1的操作就是向上舍入了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章