4

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

4

3 回答 3

4

我想我找到了我正在寻找的答案:

  1. 创建一个 ARGB_8888 位图,其中每个像素颜色设置为 (gray << 24) | 0xFFFFFF。
  2. 对于每种颜色,创建一个新的 PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY)。
  3. 要进行渲染,请创建一个 Paint 对象并使用与要使用的颜色对应的过滤器调用 setColorFilter()。然后使用 Bitmap 和 Paint 对象调用 canvas.drawBitmap。

对于单一颜色,这可能不如准确构建我想要的位图并在没有 Paint 对象的情况下绘制那么快,但它比每个图像/颜色组合的位图更节省空间。

于 2010-12-16T02:20:22.840 回答
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);
于 2012-05-05T07:50:33.053 回答
0

我会使用drawImage将图像blit到画布,getImageData()访问像素,然后循环.data图像数据,将每个像素的RGB值设置为常量,将第四个(alpha)值设置为从图像中获得的值. 然后,您可以将这个半透明的画布叠加在您需要的任何东西上。

编辑:我在我的网站上放了一个工作示例。仅适用于 Chrome/Safari。

于 2010-12-16T00:17:57.263 回答