【发布时间】:2011-05-25 18:32:41
【问题描述】:
在 Android (1.5) 中工作,我有一百个左右以字节数组形式存在的灰度图像。我想使用图像作为 alpha 蒙版在画布中绘制纯色。图像是固定的,但颜色可以改变。我可以为每个图像/颜色组合创建位图对象,但这似乎非常低效。就内存和速度而言,解决这个问题的好方法是什么? (我需要为每个图像/颜色组合多次执行此操作。)
【问题讨论】:
标签: android image canvas alpha grayscale
在 Android (1.5) 中工作,我有一百个左右以字节数组形式存在的灰度图像。我想使用图像作为 alpha 蒙版在画布中绘制纯色。图像是固定的,但颜色可以改变。我可以为每个图像/颜色组合创建位图对象,但这似乎非常低效。就内存和速度而言,解决这个问题的好方法是什么? (我需要为每个图像/颜色组合多次执行此操作。)
【问题讨论】:
标签: android image canvas alpha grayscale
我将使用drawImage 将图像blit 到画布上,getImageData() 访问像素,然后循环图像数据的.data,将每个像素的RGB 值设置为您的常量和您从图像中获得的第四个(alpha)值。然后,您可以将这个半透明的画布叠加在您需要的任何地方。
编辑:我已将a working example 放在我的网站上。仅适用于 Chrome/Safari。
【讨论】:
window.onload 内的第 115 行),而每次更新滑块时都会重新创建每种颜色的变化(作为updateColor() 的一部分)。
我想我找到了我正在寻找的答案:
对于单一颜色,这可能不如准确构建我想要的位图并在没有 Paint 对象的情况下绘制那么快,但它比每个图像/颜色组合的位图更节省空间。
【讨论】:
浮动对比度 = 100/ 180.f; 浮动比例 = 对比度 + 1.f;
cm.set(new float[] {
scale, 0, 0, 0, 0,//Red
0, 1.5f, 0, 0, 0,//Green
0, 0, 1.5f, 0, 0,//Blue
0, 0, 0, 1, 0 });//alpha
bmpGrayscale = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bitmap, 0, 0, paint);
/*BitmapDrawable bmd = new BitmapDrawable(bmpGrayscale);
photo_view.setBackgroundDrawable(bmd);*/
photo_view.setImageBitmap(bmpGrayscale);
【讨论】: