最近在搞一个关于条形码扫描的软件,需求需要扫描时是竖屏。
最后在zxing官方wiki上面找到解决办法。基本思路如下。
There are 4 relative files:
1, manifest.xml, you need to make CaptureActivity portrait.
2, DecodeHandler.java, rotate data before buildLuminanceSource, it works becuase in YCbCr_420_SP and YCbCr_422_SP, the Y channel is planar and appears first
1 |
byte [] rotatedData = new byte [data.length]; |
2 |
for ( int y = 0 ; y < height; y++) { |
3 |
for ( int x = 0 ; x < width; x++) |
4 |
rotatedData[x * height + height - y - 1 ] = data[x + y * width]; |
3, CameraManager.java, getFramingRectInPreview() need to be modified.
1 |
rect.left = rect.left * cameraResolution.y / screenResolution.x; |
2 |
rect.right = rect.right * cameraResolution.y / screenResolution.x; |
3 |
rect.top = rect.top * cameraResolution.x / screenResolution.y; |
4 |
rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y; |
4, CameraConfigurationManager.java, set camera orientation to portrait in setDesiredCameraParameters() use
1 |
parameters.set( "orientation" , "portrait" ); |
注:版本兼容请看下面。
and in getCameraResolution(), you need to swap x and y, because camera preview size is something like 480*320, other than 320*480.
1 |
int tmp = cameraResolution.x; |
2 |
cameraResolution.x = cameraResolution.y; |
3 |
cameraResolution.y = tmp; |
4 |
return cameraResolution; |
说明:
关于摄像头旋转90度的时候,不同的sdk版本方法不同。
兼容方法如下
01 |
if (Integer.parseInt(Build.VERSION.SDK) >= <img src= "http://www.andcoder.com/wp-includes/images/smilies/icon_cool.gif" alt= "8)" class = "wp-smiley" > |
02 |
setDisplayOrientation(camera, 90 ); |
04 |
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { |
05 |
parameters.set( "orientation" , "portrait" ); |
06 |
parameters.set( "rotation" , 90 ); |
08 |
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { |
09 |
parameters.set( "orientation" , "landscape" ); |
10 |
parameters.set( "rotation" , 90 ); |
14 |
protected void setDisplayOrientation(Camera camera, int angle) { |
15 |
Method downPolymorphic; |
17 |
downPolymorphic = camera.getClass().getMethod( |
18 |
"setDisplayOrientation" , new Class[] { int . class }); |
19 |
if (downPolymorphic != null ) |
20 |
downPolymorphic.invoke(camera, new Object[] { angle }); |
21 |
} catch (Exception e1) { |
<!--EndFragment-->
分享到:
相关推荐
Android Zxing 扫描条码实现竖屏模式(portrait mode) 摄像头camera 旋转90度 具体实现
Android Zxing 免安裝 扫描和扫条码实现竖屏模式1
XE7 Android Zxing免安裝 扫描和扫条码实现竖屏模式
zxing 竖屏直接改竖屏时,扫描的框很小,把扫描框拉大,扫描距离不用拉很长
android Zxing扫描二维码条形码功能仿微信自定义扫码框扫描线边框样式Eclipse版本 源码下载
ZXing Android二维码/条码扫描,2020 Android Studio版本,横竖屏都支持
亲测,完美支持横屏改竖屏,不变形,识别速度还不错! 包含3.2源码包和修改方法。
android 条码扫描源码,可以直接运行
android Zxing扫描二维码条形码功能仿微信自定义扫码框扫描线边框样式Android studio版本 源码下载
android上使用ZXing识别条形码和二维码,代码简单易懂,相信能帮助读者迅速掌握相关的开发
Zxing二维码扫描,竖屏仿QQ扫一扫
zxing 竖屏 android 快速 精准 适配
在两位大神的原有的资源基础上合而为一,快速全屏扫描出二维码,感谢前人的无私。 使用eclipse,java,zxing,android
在Android Studio中集成Zxing实现条形码和二维码的扫描
仿微信操作文档,详细介绍了在deLphixe 环境下,调用Zxing 显示横屏转换成竖屏扫描的详细操作说明,结合网上一些例子和台北一些前辈指点后进行整理,希望对你有所帮助。
Android Zxing包 调用手机摄像头去进行条码扫描。目前我只试了一维码和二维码。
zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的接口;可以实现使用手机的内置的摄像头完成条形码和二维码的扫描与解码;也可以实现条形码和二维码的编码与解码。
android Zxing扫描二维码条形码功能仿微信扫码框扫描线为图片样式 Eclipse版本 源码下载
Android 利用精简Zxing实现条形码/二维码 扫描Demo