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