可以请某人解释一下(我非常欢迎ASCII)stride
参数在Canvas.drawBitmap()
和Bitmap.setPixels()/getPixels()
中的含义是什么?我理解这是跳过colors数组中元素的一种方法,但是如何?
答案 0 :(得分:19)
在大多数情况下,步幅与宽度相同。如果您尝试复制/绘制位图的子区域,则步幅很有用。例如,如果您有一个100x100的位图,并且想要绘制50x50的右上角,则可以使用50px的宽度和100px的步幅。
答案 1 :(得分:19)
Stride是用于存储一个图像行的字节数。
步幅可能与图像宽度不同。
大多数图像都是4字节对齐的。
对于前。宽度为50像素的24位(RGB)图像。所需的总字节数为150(3(RGB)* 50)。 由于图像将是4字节对齐的,在这种情况下,所需的字节将变为152。
因此,您将看到步幅为152,宽度为50,图像对齐为4字节。
答案 2 :(得分:0)
关于图像中的一般步幅,这是一个很好的explanation from Microsoft。因此,用简单的英语,它定义了计算机扫描图像数据的步数,直到它假定它在下一行。
我也相信@Romain Guy的例子如果我理解正确的话,还需要设置x = 50和height = 50.
答案 3 :(得分:0)
我想这个问题是关于Android,java而不是Windows! 在这种情况下,跨步与“用于存储一个图像行的字节数”无关,这是Windows的命名法。
在理解参数“ stride”之前,您需要知道getPixels是一个将像素从源位图复制到目标数组(类型为int Pixels [])的函数。
关于复制,您需要知道来源(来源)和目的地(来源), 功能上
public void getPixels(int []像素,整数偏移量,整数步幅,整数x,整数y,整数宽度,整数高度){
throw new RuntimeException("Stub!");
}
这4个参数控制着来源:int x,int y,int宽度,int高度
这3个参数控制着目的地:int []像素,int偏移量,int跨度
例如您有一个width * height = 100 * 100Pixels的sourceImage,您制作了一个width * height = 200 * 100Pixels的destinationImage,然后执行以下代码,
sourceImage.getPixels(pixels,0,2 * wd,0,0,wd,ht); // 1号复制
sourceImage.getPixels(pixels,wd,2 * wd,0,0,wd,ht); //第2次复制
destinationImage = Bitmap.createBitmap(pixels,0,2 * wd,2 * wd,ht,Bitmap.Config.ARGB_8888); //制作两倍于原始尺寸的大图像
对于第1个复制getPixels的解释如下,
读取1行:线宽= wd,并将其放入Pixels [0]〜Pixels [wd-1];
2行读取:放入Pixels [stride + 0]〜Pixels [stride + wd-1];
第n行读取:将其放入Pixels [(n-1)* stride]〜Pixels [(n-1)* stride + wd-1]。
几乎是getPixels的全部。