如何有效地将位图对象读取为二维整数数组?

And*_*Dev 5 java android multidimensional-array android-bitmap

我需要在我的Android应用程序中将整个Bitmap对象读取为二维整数数组。

目前,我正在一次分别读取每个像素,如下所示:

for (int y = 0; y < coverImageHeight; y++)
{
    for (int x = 0; x < coverImageWidth; x++)
    {
        coverImageIntArray[x][y] = coverImageBitmap.getPixel(x, y);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这在大图像上会花费很长时间(大约15秒)。

有没有一种方法可以一次完成所有操作以提高效率?

Wac*_*cov 6

我不熟悉Android开发人员,但是通常对于图像对象,您只能获取引用或某些底层缓冲区的副本。该缓冲区通常为1D,但是您应该可以轻松地对其进行隐蔽处理。在您的情况下,要获取像素,有一个看起来很完美的功能getPixels

int[] coverImageIntArray1D = new int[coverImageWidth * coverImageHeight]
coverImageBitmap.getPixels(coverImageIntArray1D, 0, coverImageWidth,
    0, 0, coverImageWidth, coverImageHeight)
// coverImageIntArray1D should now contain the entire image's pixels
Run Code Online (Sandbox Code Playgroud)

仅供参考,您可以使用2D索引索引到这种类型的1D数组中:

int pixel = coverImageIntArray1D[x + y*coverImageWidth]
Run Code Online (Sandbox Code Playgroud)

这将为您提供像素[x][y]。因此,您仍然可以2D方式使用它,而无需执行低效的转换。