我目前正在将应用程序从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 easyCGContextSetAlpha(...)
我已经开始研究支持这些混合模式和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.如果看起来不正确,请记住这一点!
以上是内存溢出为你收集整理的使用iOS混合模式的Android图像和颜色混合全部内容,希望文章能够帮你解决使用iOS混合模式的Android图像和颜色混合所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)