使用iOS混合模式的Android图像和颜色混合

使用iOS混合模式的Android图像和颜色混合,android,ios,image,image-processing,alphablending,Android,Ios,Image,Image Processing,Alphablending,我目前正在将一个应用程序从iOS移植到Android,在图像处理方面遇到了一些困难 我有一个过滤器类,由ImageOverlays和ColorOverlays组成,它们以特定的顺序应用于给定的基本位图。每个ColorOverlays都有一个RGB颜色值、一个BlendModelId和一个alpha值。每个ImageOverlay都有一个图像位图、一个BlendModeId和一个alpha/强度值 我的主要问题是,我需要支持以下来自iOS的混合模式: CGBlendModeNormal CGBle

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

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

我的主要问题是,我需要支持以下来自iOS的混合模式:

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

    尝试从头开始构建模式是非常低效的

    此外,即使使用API8中确实存在的模式,我也无法找到混合2个图像的方法,但可以指定遮罩的强度(ImageOverlay中的alpha值)。与彩色覆面类似

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

    CGContextSetBlendMode(...)
    CGContextSetFillColorWithColor(...)
    CGContextFillRect(...) - This one is easy
    CGContextSetAlpha(...)
    
    我已经开始研究支持这些混合模式和alpha操作的小型第三方库。最有希望的是一个港口

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


    我肯定有人以前有过这个问题。任何帮助都将不胜感激。顺便说一句,项目规范禁止我使用OpenGLES。

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


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

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

    查看Android JNI位图信息

    这非常简单,只需创建一个带有任何 需要的参数(颜色值或可能要混合在一起的另一个位图对象),锁定该位图的像素缓冲区,执行以下操作: 需要计算,并解锁位图

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