项目中遇到各种失真,例如图片变绿,图片曝光严重,出现两个图片拼接的情况,这些问题都是偶然的,有些手机可能遇到的比较频繁,例如有个用户使用的是SM-G3502C手机,拼接图片频繁。但其他用户使用的这款手机木有问题。。。哪位大侠遇到过这些问题,快点给我留言呀,单身的英雄,我给你介绍个美丽的妹子。
?
下面是论坛上其他朋友的分析,但应用层我的apk中貌似没法操作系统camera中cpp的内容。有知道如何操作的分享一下,介绍妹子噢(*^__^*)?
?
http://bbs.csdn.net/topics/390252674
问题:?有没有谁对Android?Camera?应用熟悉,?Android?原生Camera?应用的全景预览画面有点失真,?颜色偏亮;比如,?深绿色的叶子,?在画面上是浅绿色,?好像覆盖一层亮白,?谁解决了?
建议:我碰到过,?这个是原生方案采用的参数不恰当导致的。
全景图像数据的处理是使用OpenGL?处理的,?你可以看下?Camea?apk的?jni部分的源码,?找到文件:
jni/feature_mos/src/mosaic_renderer/YVURenderer.cpp
找到?成员函数?FragmentShaderSource()的定义,?该函数内部采用的从?RGBA?格式转YUV格式的矩阵参数选择不恰当,?如果你对相关?知识熟悉的话,?应该知道是有两组可选参数的,?分别用在静态图像和动态视频中。
相关转换知识请参考:?http://www.fourcc.org/fccyvrgb.php
第一组:
Y??=??????(0.257?*?R)?+?(0.504?*?G)?+?(0.098?*?B)?+?16
Cr?=?V?=??(0.439?*?R)?-?(0.368?*?G)?-?(0.071?*?B)?+?128
Cb?=?U?=?-(0.148?*?R)?-?(0.291?*?G)?+?(0.439?*?B)?+?128
这是原生?camera?采用的这一种,?是不恰当的,?而且存在错误,?请看如下实际代码:
"const?vec4?coeff_y?=?vec4(0.257,?0.594,?0.098,?0.063);\n"
?"const?vec4?coeff_v?=?vec4(0.439,?-0.368,?-0.071,?0.500);\n"
?"const?vec4?coeff_u?=?vec4(-0.148,?-0.291,?0.439,?0.500);\n"
请看每一个向量定义中最后一维的值,?如果RGBA中alpha分量不为255,?必然导致?转换公式中最后的常量部分值不对,?这是错误,?既然是常量,?就不应该收alpha分量影响。
第二组:
y??=?0.299R+0.587G+0.114B
cr?=??0.500R-0.419G-0.081B
cb?=??-0.169R-0.331G+0.500B
这个是修正方案,?你可以采用这个;?不过需要注意,?这个转换公式不带常数,?因此转换矩阵的最后一维都设为0即可。
修改后:
?"const?vec4?coeff_y?=?vec4(0.299,?0.587,?0.114,?0.0);\n"
?"const?vec4?coeff_v?=?vec4(0.500,?-0.419,?-0.081,?0.0);\n"
?"const?vec4?coeff_u?=?vec4(-0.169,?-0.331,?0.500,?0.0);\n"
你可以试一下。
?
?