标签:alphablending image image-processing 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上运行.
从头开始构建模式效率极低.
此外,即使使用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.
解决方法:
即使我通过电子邮件为您提供了帮助,但我还是想把问题也发给您,以防有人想要更多解释:-)
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。