我目前正在将应用程序从 iOS 移植到 Android 中,但在图像处理方面遇到了一些困难。
我有一个过滤器类,它由 ImageOverlays 和 ColorOverlays 组成,它们以特定的顺序应用于给定的基本位图。每个 ColorOverlays 都有一个 RGB 颜色值、一个 BlendModeId 和一个 alpha 值。每个 ImageOverlay 都有一个图像位图、一个 BlendModeId 和一个 alpha/强度值。
我的主要问题是我需要支持以下从 iOS 获取的混合模式:
- CGBlendModeNormal
- CGBlendMode乘法
- CGBlendModeScreen
- CGBlendModeOverlay
- CGBlendModeDarken
- CGBlendModeLighten
- CGBlendModeColorDodge
其中一些在 Android 中有相应的 PorterDuff.Mode 类型,而另一些则没有。更糟糕的是,一些确实存在的模式是在最新版本的 Android 中引入的,我需要在 API 级别 8 上运行。
尝试从头开始构建模式效率极低。
此外,即使使用 API8 中确实存在的模式,我也无法找到混合 2 个图像但允许您指定蒙版强度(来自 ImageOverlay 的 alpha 值)的方法。与 ColorOverlays 类似。
我试图在 Android 中复制的 iOS 功能是
CGContextSetBlendMode(...)
CGContextSetFillColorWithColor(...)
CGContextFillRect(...) - This one is easy
CGContextSetAlpha(...)
我已经开始研究支持这些混合模式和 alpha 操作的小型第三方库。最有希望的是poelocesar 的 lib-magick,据说它是ImageMagick的一个端口。
虽然 lib-magick 确实提供了大多数所需的混合模式(称为CompositeOperator
),但我无法找到设置强度值或使用混合模式进行颜色填充的方法。
我敢肯定以前有人遇到过这个问题。任何帮助,将不胜感激。顺便说一句,项目规范禁止我进入 OpenGLES。