其他分享
首页 > 其他分享> > 使用iOS混合模式的Android图像和颜色混合

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

作者:互联网

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

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

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

> CGBlendModeNormal
> CGBlendModeMultiply
> CGBlendModeScreen
> CGBlendModeOverlay
> CGBlendModeDarken
> CGBlendModeLighten
> CGBlendModeColorDodge

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

从头开始构建模式效率极低.

此外,即使使用API​​8中存在的模式,我也无法找到混合2张图像但允许您指定遮罩强度(ImageOverlay中的alpha值)的方法.与ColorOverlays类似.

我要在Android中复制的iOS功能是

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

我已经开始研究支持这些混合模式和alpha操作的小型第三方库.最有前途的是poelocesar’s lib-magick,据说是ImageMagick的港口.

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

我敢肯定有人曾经有过这个问题.任何帮助,将不胜感激.顺便说一句,项目规范禁止我进入OpenGLES.

解决方法:

即使我通过电子邮件为您提供了帮助,但我还是想把问题也发给您,以防有人想要更多解释:-)

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

请查看this site以获取Android JNI位图信息.

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

不过,请注意内存中位图的格式,
因为565的移位/计算将不同于8888.如果看起来不正确,请记住这一点!

标签:alphablending,image,image-processing,ios,android
来源: https://codeday.me/bug/20191101/1982422.html