有人能解释一下(ASCII真的很受欢迎)stride参数在Canvas.drawBitmap()和Bitmap.setPixels()/getPixels()中代表什么吗?我知道这是一种跳过colors数组中元素的方法,但如何做到呢?
stride
Canvas.drawBitmap()
Bitmap.setPixels()/getPixels()
osh3o9ms1#
步幅是用于存储一个图像行的字节数。步幅可以与图像宽度不同。大多数图像是4字节对齐的。例如,宽度为50像素的24位(RGB)图像。所需的总字节数为150(3(RGB)*50)。由于图像将是4字节对齐的,在这种情况下,所需的字节数将变为152。因此,您将看到步幅为152,宽度为50,图像对齐为4字节。
j2qf4p5b2#
在大多数情况下,步幅与宽度相同。如果您要复制/绘制位图的子区域,步幅很有用。例如,如果您有一个100 x100的位图,并且您要绘制50 x50的右上角,您可以使用50 px的宽度和100 px的步幅。
fdbelqdn3#
我想这个问题是关于Android,Java,而不是Windows的!在这种情况下,Stride与“用于存储一个图像行的字节数”无关,这是一个Windows命名法。在理解参数“stride”之前,需要知道get泛指els是一个将像素从源位图复制到目标数组的函数(类型为int泛指els [])。关于复制,你需要知道来源在哪里,目的在哪里,在功能上,public void get泛指els(int[]像素,int偏移量,int跨距,int x,int y,int宽度,int高度){
throw new RuntimeException("Stub!");
}这4个参数控制源:整型x,整型y,整型宽度,整型高度这3个参数控制目的地:int[]像素、int偏移量、int跨距例如,您有一个宽度 * 高度= 100* 100像素的sourceImage,您创建了一个宽度 * 高度= 200* 100像素的destinationImage,并且您创建了以下代码:像素(像素,0,2wd,0,0,wd,ht);// No.1复制(像素,wd,2wd,0,0,wd,ht);// No.2复制如果您想创建一个新的位图,请点击这里。如果您想创建新的位图,请点击这里。//制作一个两倍于原始大小的大图像下面对第一个复制get泛指els进行说明:1行阅读:线宽= wd,并将其放入泛指els [0]~泛指els [wd-1]中;2.线阅读:将其放入泛指els [stride+0]~泛指els [stride+wd-1];第n行阅读:将其放入像素[(n-1)*stride]~像素[(n-1)*stride+wd-1]中。这就是get泛指els的大部分内容。
mhd8tkvw4#
这里有一个很好的explanation from Microsoft,它描述了图像中的步幅,用简单的英语来说,它定义了计算机扫描图像数据的步骤,直到它认为它在下一行。我还相信,如果我理解正确的话,@Romain Guy的例子也需要设置x = 50和height = 50。
4条答案
按热度按时间osh3o9ms1#
步幅是用于存储一个图像行的字节数。
步幅可以与图像宽度不同。
大多数图像是4字节对齐的。
例如,宽度为50像素的24位(RGB)图像。所需的总字节数为150(3(RGB)*50)。由于图像将是4字节对齐的,在这种情况下,所需的字节数将变为152。
因此,您将看到步幅为152,宽度为50,图像对齐为4字节。
j2qf4p5b2#
在大多数情况下,步幅与宽度相同。如果您要复制/绘制位图的子区域,步幅很有用。例如,如果您有一个100 x100的位图,并且您要绘制50 x50的右上角,您可以使用50 px的宽度和100 px的步幅。
fdbelqdn3#
我想这个问题是关于Android,Java,而不是Windows的!在这种情况下,Stride与“用于存储一个图像行的字节数”无关,这是一个Windows命名法。
在理解参数“stride”之前,需要知道get泛指els是一个将像素从源位图复制到目标数组的函数(类型为int泛指els [])。
关于复制,你需要知道来源在哪里,目的在哪里,在功能上,
public void get泛指els(int[]像素,int偏移量,int跨距,int x,int y,int宽度,int高度){
}
这4个参数控制源:整型x,整型y,整型宽度,整型高度
这3个参数控制目的地:int[]像素、int偏移量、int跨距
例如,您有一个宽度 * 高度= 100* 100像素的sourceImage,您创建了一个宽度 * 高度= 200* 100像素的destinationImage,并且您创建了以下代码:
像素(像素,0,2wd,0,0,wd,ht);// No.1复制
(像素,wd,2wd,0,0,wd,ht);// No.2复制
如果您想创建一个新的位图,请点击这里。如果您想创建新的位图,请点击这里。//制作一个两倍于原始大小的大图像
下面对第一个复制get泛指els进行说明:
1行阅读:线宽= wd,并将其放入泛指els [0]~泛指els [wd-1]中;
2.线阅读:将其放入泛指els [stride+0]~泛指els [stride+wd-1];
第n行阅读:将其放入像素[(n-1)*stride]~像素[(n-1)*stride+wd-1]中。
这就是get泛指els的大部分内容。
mhd8tkvw4#
这里有一个很好的explanation from Microsoft,它描述了图像中的步幅,用简单的英语来说,它定义了计算机扫描图像数据的步骤,直到它认为它在下一行。
我还相信,如果我理解正确的话,@Romain Guy的例子也需要设置x = 50和height = 50。