优化或替换Bitmap.setPixel

时间:2014-08-07 15:28:59

标签: android optimization bitmap

我正在从原始数据创建热区位图。为此,我将我的rawdata的每个值转换为颜色,然后我将其影响到位图的像素:

for(int i = 0; i < this.heatDatas.length; i++)
{
    for(int j = 0; j < this.maxY; j++)
    {
        ratio = this.heatDatas[i][j] / (double) this.maxValue;

        ratio = ratio * this.nbIndexColors;
        idxColor1 = (int) Math.floor(ratio);
        idxColor2 = idxColor1 + 1;
        distance = ratio - idxColor1;

        r = (int) ((colors[idxColor2][0] - colors[idxColor1][0]) * distance + colors[idxColor1][0]);
        g = (int) ((colors[idxColor2][1] - colors[idxColor1][1]) * distance + colors[idxColor1][1]);
        b = (int) ((colors[idxColor2][2] - colors[idxColor1][2]) * distance + colors[idxColor1][2]);

        bmp.setPixel(i, j, Color.argb(this.alpha, r, g, b));

    }
}

这是有效的,但它真的很慢(nexus 5上的512 * 512位图大约800ms)。经过一些调查后,似乎bmp.setPixel(i, j, Color.argb(this.alpha, r, g, b));占用了总执行时间的近50%。 Color.argb()似乎可以忽略不计。

我该怎么做才能获得更好的表现?

由于

注意:此代码的目的是显示热区悬停在imageview

1 个答案:

答案 0 :(得分:1)

SetPixel开销很大。获取位图副本(getPixels)或从头创建它,修改它并复制回来(setPixels)通常要快得多。