zxing实现竖屏扫描

第一步:修改AndroidManifest清单文件,删除AndroidManifest中CaptureActivity的screenOrientation属性:

<activityandroid:name=".CaptureActivity"android:screenOrientation="landscape"android:clearTaskOnLaunch="true"android:stateNotNeeded="true"android:theme="@style/CaptureTheme"android:windowSoftInputMode="stateAlwaysHidden">

<activityandroid:name=".CaptureActivity"android:screenOrientation="portrait"android:clearTaskOnLaunch="true"android:stateNotNeeded="true"android:theme="@style/CaptureTheme"android:windowSoftInputMode="stateAlwaysHidden">

第二步:删除CaptureActivity中把onResume方法中的无用代码:

//if(prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION,true)){//setRequestedOrientation(getCurrentOrientation());//}else{//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);//}


第三步:在CaptureActivity中把onCreate方法结尾处添加代码:

if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}else{setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}

if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}else{setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}


第四步:在CameraConfigurationManager的setDesiredCameraParameters方法中添加代码:

camera.setDisplayOrientation(90);//add这句代码作用是旋转镜头90度,使相机预览方向正确显示camera.setParameters(parameters);

camera.setDisplayOrientation(90);//add这句代码作用是旋转镜头90度,使相机预览方向正确显示camera.setParameters(parameters);


第五步:修改CameraManager中getFramingRectInPreview方法:

//rect.left=rect.left*cameraResolution.x/screenResolution.x;//rect.right=rect.right*cameraResolution.x/screenResolution.x;//rect.top=rect.top*cameraResolution.y/screenResolution.y;//rect.bottom=rect.bottom*cameraResolution.y/screenResolution.y;rect.left=rect.left*cameraResolution.y/screenResolution.x;rect.right=rect.right*cameraResolution.y/screenResolution.x;rect.top=rect.top*cameraResolution.x/screenResolution.y;rect.bottom=rect.bottom*cameraResolution.x/screenResolution.y;

//rect.left=rect.left*cameraResolution.x/screenResolution.x;//rect.right=rect.right*cameraResolution.x/screenResolution.x;//rect.top=rect.top*cameraResolution.y/screenResolution.y;//rect.bottom=rect.bottom*cameraResolution.y/screenResolution.y;rect.left=rect.left*cameraResolution.y/screenResolution.x;rect.right=rect.right*cameraResolution.y/screenResolution.x;rect.top=rect.top*cameraResolution.x/screenResolution.y;rect.bottom=rect.bottom*cameraResolution.x/screenResolution.y;


第六步:修改DecodeHandler中的decode(byte[] data, int width, int height)方法:


PlanarYUVLuminanceSourcesource=activity.getCameraManager().buildLuminanceSource(data,width,height);

PlanarYUVLuminanceSourcesource=activity.getCameraManager().buildLuminanceSource(data,width,height);

前添加代码

byte[]rotatedData=newbyte[data.length];for(inty=0;y<height;y++){for(intx=0;x<width;x++)rotatedData[x*height+height-y-1]=data[x+y*width];}inttmp=width;width=height;height=tmp;data=rotatedData;

byte[]rotatedData=newbyte[data.length];for(inty=0;y<height;y++){for(intx=0;x<width;x++)rotatedData[x*height+height-y-1]=data[x+y*width];}inttmp=width;width=height;height=tmp;data=rotatedData;