如何在Android中使用字节数组获取像素颜色

时间:2014-09-03 01:53:35

标签: android performance byte getpixel

在我的Android项目中, 这是我的代码。

for (int x = 0; x < targetBitArray.length; x += weight) {
    for (int y = 0; y < targetBitArray[x].length; y += weight) {
        targetBitArray[x][y] = bmp.getPixel(x, y) == mSearchColor;
    }
}

但这段代码浪费了很多时间。

所以我需要找到比bitmap.getPixel()更快的方法。 我正在尝试使用从位图转换的字节数组来获取像素颜色,但我不能。 如何替换Bitmap.getPixel()?

1 个答案:

答案 0 :(得分:3)

每个Bitmap.getPixel方法调用都需要大量资源,因此您需要避免大量请求以提高代码的性能。

我的建议是:

  1. 使用Bitmap.getPixels方法逐行读取图像数据到本地数组
  2. 沿着本地数组迭代
  3. e.g。

    int [] rowData= new int [bitmapWidth];
    for (int row = 0; row < bitmapHeight; row ++) {
        // Load row of pixels
        bitmap.getPixels(rowData, 0, bitmapWidth, 0, row, bitmapWidth, 1);
    
        for (int column = 0; column < bitmapWidth; column ++) {
            targetBitArray[column][row] = rowData(column) == mSearchColor;
        }
    }
    

    这对于代码的性能来说是一个很大的改进