我有一个imageview,我想根据用户选择更改颜色
从互联网上的例子我看到真正做到这一点的唯一方法是通过并修改每个像素......但它似乎非常慢
如果我将其添加到我的代码中,则需要足够长的时间才会提示用户强制关闭或等待
for(int i =0 ; i < mBitmap.getHeight(); ++i)
{
for(int g = 0; g < mBitmap.getWidth(); ++g)
{
}
}
更改图像颜色的最佳方法是什么?
图像是一个320x100的小图像,大部分是透明的,内部有一个小图像,我希望改变颜色的小图像
答案 0 :(得分:2)
问题在于使用getPixel(x,y)
。逐个抓取每个像素是一个非常缓慢的过程。而是使用getPixels
void getPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height)
Returns in pixels[] a copy of the data in the bitmap.
它会返回一个带有像素值的整数数组(并对该数组进行操作,然后使用setPixels
),它会更快(虽然需要更多内存)
对于小图像,此方法可以。步幅等于图像宽度。
mBitmap.getPixels( pixels, 0 , mBitmap.getWidth(), 0, 0 , mBitmap.getWidth(), mBitmap.getHeight());
答案 1 :(得分:0)
按复杂程度排序:
检查API演示中的示例以了解ColorFilter和ColorMatrix的用法。但是,由于您将其描述为您尝试修改的图像中的图像,因此可能不适用。
将处理代码放在自己的线程上以避免应用程序无响应问题。查看AsyncTask。您可能需要在处理时运行等待动画。
考虑OpenGL ES 1.x.将图像用作纹理并使用alpha覆盖颜色以获得效果。虽然这会有更好的性能,但是需要考虑添加UI元素的复杂性(即构建自己的元素)。