在Android(1.5)中,我有一百个左右的灰度图像,以字节阵列的形式。我想将图像用作α面膜,以在画布中绘制纯色。图像是固定的,但颜色可以改变。我可以为每个图像/颜色组合创建位图对象,但这似乎非常效率低下。就记忆和速度而言,如何解决此问题的好方法是什么? (我需要为每个图像/颜色组合做很多次。)

有帮助吗?

解决方案

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

  1. 创建一个argb_8888位图,其中每个像素颜色设置为(灰色<< 24)| 0xffffff。
  2. 对于每种颜色,创建一个新的PorterDuffColorFilter(颜色,Porterduff.mode.multiply)。
  3. 要渲染,创建一个油漆对象并调用setColorFilter(),其过滤器与要使用的颜色相对应。然后使用位图和油漆对象调用Canvas.DrawBitMap。

对于单一颜色,这可能不如构建我想要和绘制的没有油漆对象的位图的快速,但是对于每个图像/颜色组合而言,它的空间效率要高得多。

其他提示

浮点对比= 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上工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top