【问题标题】:Android image and color blending using iOS blend modes使用 iOS 混合模式的 Android 图像和颜色混合
【发布时间】:2012-06-02 10:30:19
【问题描述】:

我目前正在将应用程序从 iOS 移植到 Android,但在图像处理方面遇到了一些困难。

我有一个过滤器类,它由 ImageOverlays 和 ColorOverlays 组成,它们以特定顺序应用于给定的基本位图。每个 ColorOverlays 都有一个 RGB 颜色值、一个 BlendModeId 和一个 alpha 值。每个 ImageOverlay 都有一个图像位图、一个 BlendModeId 和一个 alpha/intensity 值。

我的主要问题是我需要支持以下从 iOS 获取的混合模式:

  1. CGBlendModeNormal
  2. CGBlendModeMultiply
  3. CGBlendModeScreen
  4. CGBlendModeOverlay
  5. CGBlendModeDarken
  6. CGBlendModeLighten
  7. CGBlendModeColorDodge

其中一些在 Android 中具有相应的 PorterDuff.Mode 类型,而另一些则没有。更糟糕的是,一些确实存在的模式是在最新版本的 Android 中引入的,我需要在 API 级别 8 上运行。

尝试从头开始构建模式效率极低。

此外,即使使用 API8 中确实存在的模式,我也无法找到混合 2 张图像但允许您指定蒙版强度(来自 ImageOverlay 的 alpha 值)的方法。与 ColorOverlays 类似。

我试图在 Android 中复制的 iOS 功能是

CGContextSetBlendMode(...)
CGContextSetFillColorWithColor(...)
CGContextFillRect(...) - This one is easy
CGContextSetAlpha(...)

我已经开始研究支持这些混合模式和 alpha 操作的小型第三方库。最有希望的是poelocesar's lib-magick,它应该是ImageMagick 的一个端口。

虽然 lib-magick 确实提供了大多数所需的混合模式(称为 CompositeOperator),但我无法找到设置强度值或使用混合模式进行颜色填充的方法。

我确信以前有人遇到过这个问题。任何帮助,将不胜感激。顺便说一句,项目规范禁止我进入 OpenGLES。

【问题讨论】:

    标签: android ios image image-processing alphablending


    【解决方案1】:

    即使我通过电子邮件帮助了你,我想我也会发布你的问题,以防有人需要更多解释:-)

    2.2 是 API 级别 8,它支持“libjnigraphics”库中的 NDK,它使您可以访问位图对象的像素缓冲区。 您可以手动进行这些混合 - 它们是非常简单的数学运算 计算,并且可以非常快速地完成。

    查看this site 了解 Android JNI 位图信息。

    真的很简单,只需创建一个 JNI 方法 blend() 与任何 您需要的参数(颜色值或可能要混合在一起的另一个位图对象),锁定该位图的像素缓冲区,执行 需要计算,并解锁位图。 Link

    需要注意内存中位图的格式,但是, 因为 565 的移位/计算将不同于 8888。如果它看起来不完全正确,请记住这一点!

    【讨论】:

      【解决方案2】:

      事实证明,在 jni 中实现它并没有之前预期的那么痛苦。以下链接包含所有详细信息。

      How does photoshop blend two images together?

      【讨论】:

        猜你喜欢
        • 2016-01-24
        • 1970-01-01
        • 2020-12-25
        • 2011-11-14
        • 1970-01-01
        • 2017-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多