跨距也就是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的操作就是向上舍入了。