我正在从原始数据创建热区位图。为此,我将我的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
答案 0 :(得分:1)
SetPixel
开销很大。获取位图副本(getPixels
)或从头创建它,修改它并复制回来(setPixels
)通常要快得多。