在Android(1.5)中工作时,我有大约一百个灰度图像,以字节数组的形式存在。我想将这些图像用作Canvas中绘制纯色的Alpha掩码。这些图像是固定的,但颜色可以改变。我可以为每个图像/颜色组合创建Bitmap对象,但这似乎非常低效。从内存和速度两方面考虑,如何解决这个问题?(我需要为每个图像/颜色组合执行此操作多次。)
浮点对比度 = 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);
我会使用drawImage
将图像绘制到画布上,使用getImageData()
访问像素,然后循环遍历图像数据的.data
,将每个像素的RGB值设置为您的常量,并将第四个(alpha)值设置为从图像获取的值。然后,您可以在任何需要的地方叠加这个半透明的画布。
编辑:我已经在我的网站上放置了一个工作示例。仅适用于Chrome / Safari。
window.onload
内的第115行),而每种颜色的变化会在每次更新滑块时重新创建(作为updateColor()
的一部分)。 - Phrogz