转载请注明出处:http://blog.csdn.net/zhouli_csdn/article/details/49930323


1.修改manifest文件,将CaptureActivity的screenOrentatino设为portrait。

2.摄像头调整为竖向在CameraConfigurationManager类中添加如下方法:

protected void setDisplayOrientation(Camera camera, int angle) {//mycode

Method downPolymorphic;

try {

downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });

if (downPolymorphic != null)

downPolymorphic.invoke(camera, new Object[] { angle });

} catch (Exception e1) {
e1.printStackTrace();
}
}
在CameraConfigurationManager的setDesiredCameraParameters方法中调用此方法。

setDisplayOrientation(camera, 90);//mycode


3.CameraConfigurationManager类的initFromCameraParameters方法中注释一下代码:

//这段代码用于横屏的时候+
/*if (width < height) {
Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");
int temp = width;
width = height;
height = temp;
}*/

4.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;*/

//竖屏模式mycode
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;
5.CameraManager类的getFramingRect方法修改:
//用于横屏时候的扫描mycode
//int width = findDesiredDimensionInRange(screenResolution.x, MIN_FRAME_WIDTH, MAX_FRAME_WIDTH);
//int height = findDesiredDimensionInRange(screenResolution.y, MIN_FRAME_HEIGHT, MAX_FRAME_HEIGHT);

//用于竖屏的扫描
int height = findDesiredDimensionInRange(screenResolution.x, MIN_FRAME_WIDTH, MAX_FRAME_WIDTH);
int width = findDesiredDimensionInRange(screenResolution.y, MIN_FRAME_HEIGHT, MAX_FRAME_HEIGHT);

6.DecodeHandler修改decode方法

PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(data, width, height);之前加入一下代码

//mycode
byte[] rotatedData = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
rotatedData[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width; // Here we are swapping, that's the difference to #11
width = height;
height = tmp;
data = rotatedData;

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



更多相关文章

  1. 检查ArrayList是否只包含null值的方法。
  2. studio更新时候,不小心点了ignore,无法更新的解决方法
  3. android之发送短信的方法研究
  4. SQLite的Android光标在方法调用时崩溃
  5. android 2D 游戏的开发的方法
  6. 在Skobbler中完成导航时,确定“街边”的最佳方法是什么?
  7. 【Camera】Android平台Camera实时滤镜实现方法
  8. Fragment的setUserVisibleHint方法实现视频音频播放暂停
  9. Android代码性能优化技巧

随机推荐

  1. android 简单动画之 animtion
  2. Android 模拟器
  3. Android中对Log日志文件的分析
  4. android SDK2.3 更新改动翻译
  5. android——Serializable & Parcelable
  6. 第二讲:Android系统构架分析和应用程序目
  7. Android Studio 网络调试
  8. Android(安卓)在oncreate() 方法中调用 f
  9. Android实现九宫格 主界面应用列表效果
  10. android的xml解析