【问题标题】:drawBitmap() and setPixels(): what's the stride?drawBitmap() 和 setPixels():步幅如何?
【发布时间】:2011-06-15 09:46:44
【问题描述】:

能否请人解释一下(ASCII 非常受欢迎)stride 参数在Canvas.drawBitmap()Bitmap.setPixels()/getPixels() 中代表什么?我知道这是一种跳过颜色数组中元素的方法,但是如何?

【问题讨论】:

    标签: android canvas bitmap drawing


    【解决方案1】:

    在大多数情况下,步幅与宽度相同。如果您尝试复制/绘制位图的子区域,则步幅很有用。例如,如果您有一个 100x100 的位图,并且要绘制 50x50 的右上角,则可以使用 50 像素的宽度和 100 像素的步幅。

    【讨论】:

    • 你能用example.plz解释一下吗
    【解决方案2】:

    步幅是用于存储一个图像行的字节数。

    步幅可以与图像宽度不同。

    大多数图像都是 4 字节对齐的。

    例如。宽度为 50 像素的 24 位 (RGB) 图像。所需的总字节数为 150 (3(RGB)*50)。 由于图像将是 4 字节对齐的,在这种情况下所需的字节将变为 152。

    因此您将看到步幅为 152,宽度为 50,图像对齐为 4 个字节。

    【讨论】:

      【解决方案3】:

      这是一个很好的explanation from Microsoft,关于图像中通常的步幅。因此,用简单的英语来说,它定义了计算机扫描图像数据的步骤,直到它假定它位于下一行。

      如果我理解正确,我也相信@Romain Guy 的示例还需要设置 x = 50 和 height = 50。

      【讨论】:

        【解决方案4】:

        我想问题是关于 Android、Java,而不是 Windows! 在这种情况下,stride 与“用于存储一个图像行的字节数”无关,这是一种 windows 命名法。

        在理解参数“stride”之前,你需要知道getPixels是一个将像素从源Bitmap复制到目标数组(类型为int Pixels[])的函数。

        关于复制,你需要知道来源(来自)在哪里,目的地(来)在哪里, 在功能上,

        public void getPixels(int[] 像素, int offset, int stride, int x, int y, int width, int height) {

        throw new RuntimeException("Stub!");
        

        }

        这4个参数控制来源:int x, int y, int width, int height

        这 3 个参数控制目的地:int[] 像素、int 偏移量、int 步幅

        例如你有一个宽度*高度 = 100*100Pixels 的 sourceImage,你制作了一个宽度 * 高度 = 200*100Pixels 的 destinationImage,并且你制作了以下代码,

        sourceImage.getPixels(像素, 0, 2*wd, 0, 0, wd, ht); // 1号复制

        sourceImage.getPixels(pixels, wd, 2*wd, 0, 0, wd, ht);// 2号复制

        destinationImage = Bitmap.createBitmap(像素, 0, 2*wd, 2*wd, ht, Bitmap.Config.ARGB_8888); // 制作两倍于原图大小的大图像

        对No.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 的大部分内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-01
          • 2011-10-09
          • 1970-01-01
          • 1970-01-01
          • 2021-01-29
          • 2019-12-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多