Android 如何对颜色进行alpha遮罩

Android 如何对颜色进行alpha遮罩,android,image,canvas,alpha,grayscale,Android,Image,Canvas,Alpha,Grayscale,在Android(1.5)中工作时,我有大约一百张字节数组形式的灰度图像。我想使用图像作为alpha遮罩在画布中绘制纯色。图像是固定的,但颜色可以改变。我可以为每个图像/颜色组合创建位图对象,但这似乎效率极低。在内存和速度方面,解决这个问题的好方法是什么?(我需要为每个图像/颜色组合多次执行此操作。)我将使用drawImage将图像快速放到画布上,getImageData()访问像素,然后循环图像数据的.data,将每个像素的RGB值设置为常量和第四个(alpha)从图像中获得的价值。然后,您可

在Android(1.5)中工作时,我有大约一百张字节数组形式的灰度图像。我想使用图像作为alpha遮罩在画布中绘制纯色。图像是固定的,但颜色可以改变。我可以为每个图像/颜色组合创建位图对象,但这似乎效率极低。在内存和速度方面,解决这个问题的好方法是什么?(我需要为每个图像/颜色组合多次执行此操作。)

我将使用
drawImage
将图像快速放到画布上,
getImageData()
访问像素,然后循环图像数据的
.data
,将每个像素的RGB值设置为常量和第四个(alpha)从图像中获得的价值。然后,您可以将此半透明画布分层到您需要的任何内容上


编辑:我已经在我的网站上发布了一部分。仅适用于Chrome/Safari。

我想我找到了我想要的答案:


  • 创建一个ARGB_8888位图,其中每个像素颜色设置为(灰度浮动对比度=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);
    

    我是这样做的。问题(我看我没有充分解释)我需要一个解决方案,每个图像都可以缓存并多次重复使用。我无法在每次需要时重新生成图像,也无法以所需的每种颜色缓存图像。@TedHopp我很高兴您有一个解决方案。但是,我上面的解决方案确实缓存了图像数据,而不缓存每种颜色的变化。请注意图像数据只加载一次(在
    窗口内的第115行。onload
    ),而每次更新滑块时(作为
    updateColor()
    )都会重新创建每种颜色的变化。我试图避免的是为每种颜色变化生成一个新图像。Porter-Duff颜色过滤器似乎就是这样做的。