如何使用alpha蒙版颜色

时间:2010-12-15 07:56:20

标签: android image canvas alpha grayscale

在Android(1.5)中工作,我有一百个以字节数组形式的灰度图像。我想将图像用作alpha蒙版,用于在Canvas中绘制纯色。图像是固定的,但颜色可以改变。我可以为每个图像/颜色组合创建Bitmap对象,但这看起来非常低效。在内存和速度方面,解决这个问题的好方法是什么? (我需要为每个图像/颜色组合多次执行此操作。)

3 个答案:

答案 0 :(得分:4)

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

  1. 创建ARGB_8888位图,其中每个像素颜色设置为(灰色<&lt;&lt; 24)| 0XFFFFFF。
  2. 对于每种颜色,创建一个新的PorterDuffColorFilter(颜色,PorterDuff.Mode.MULTIPLY)。
  3. 要渲染,请创建一个Paint对象,并使用与要使用的颜色对应的滤镜调用setColorFilter()。然后使用Bitmap和Paint对象调用canvas.drawBitmap。
  4. 对于单色,这可能不如构建我想要的Bitmap和没有Paint对象的绘图那么快,但它比每个图像/颜色组合的Bitmap空间效率更高。

答案 1 :(得分:1)

浮动对比度= 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);

答案 2 :(得分:0)

我会使用drawImage将图像blit到画布,getImageData()来访问像素,然后遍历图像数据的.data,为每个设置RGB值像素到你的常数和第四个(alpha)值到你从图像得到的。然后,您可以将此半透明画布分层到您需要的任何位置。

修改:我已将a working example这个放在我的网站上。仅适用于Chrome / Safari。

相关问题