您的位置:首页 > 移动开发 > Android开发

Android Zxing 扫描条码实现竖屏模式(portrait mode) 摄像头camera 旋转90度

2012-10-19 18:56 381 查看
最近在搞一个关于条形码扫描的软件,需求需要扫描时是竖屏。

最后在zxing官方wiki上面找到解决办法。基本思路如下。

Thereare4relativefiles:

1,manifest.xml,youneedtomakeCaptureActivityportrait.

2,DecodeHandler.java,rotatedatabeforebuildLuminanceSource,itworksbecuaseinYCbCr_420_SPandYCbCr_422_SP,theYchannelisplanarandappearsfirst

平板视图

打印

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];
5
}
3,CameraManager.java,getFramingRectInPreview()needtobemodified.

平板视图

打印

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,setcameraorientationtoportraitinsetDesiredCameraParameters()use

平板视图

打印

1
parameters.set(
"orientation"
,
"portrait"
);
注:版本兼容请看下面。

andingetCameraResolution(),youneedtoswapxandy,becausecamerapreviewsizeissomethinglike480*320,otherthan320*480.

平板视图

打印

1
int

tmp=cameraResolution.x;
2
cameraResolution.x=cameraResolution.y;
3
cameraResolution.y=tmp;
4
return

cameraResolution;
说明:

关于摄像头旋转90度的时候,不同的sdk版本方法不同。

兼容方法如下

(所在文件:CameraConfigurationManager.java)
平板视图

打印

01
if

(Integer.parseInt(Build.VERSION.SDK)>=<IMG
class
=wp-smileyalt=
8
)
src=
"http://www.andcoder.com/wp-includes/images/smilies/icon_cool.gif"
>
02
setDisplayOrientation(camera,
90
);
03
else

{
04
if

(getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){
05
parameters.set(
"orientation"
,
"portrait"
);
06
parameters.set(
"rotation"
,
90
);
07
}

08
if

(getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){
09
parameters.set(
"orientation"
,
"landscape"
);
10
parameters.set(
"rotation"
,
90
);
11
}

12
}
13
14
protected

void

setDisplayOrientation(Cameracamera,
int

angle){
15
MethoddownPolymorphic;
16
try

{
17
downPolymorphic=camera.getClass().getMethod(
18
"setDisplayOrientation"
,
new

Class[]{
int
.
class

});
19
if

(downPolymorphic!=
null
)
20
downPolymorphic.invoke(camera,
new

Object[]{angle});
21
}

catch

(Exceptione1){
22
}

23
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: