ZXing改横屏识别为竖屏识别-中间极光线
好久没上csdn了, 在这里特别想念大家, 最近公司一段时间忙吧,无暇东顾。扫噶,还是直接进入主题吧
大家都知道 直接从google down下来的 zxing二维码扫描 是 在扫描界面 中间的红线是 竖着的 ,那么怎么能让它 横着 显示呢, 只 因简单几步,轻松搞定
一 点开 com.google.zxing.client.android包 在decode 方法中 修改 代码
PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, height); 把这行注释 在下方修改为:这里还是为了初学者考虑这样写
/**
* 在此修改
*/
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;
PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height);
/**
* 修改结束
*/
二 点开包com.google.zxing.client.android.camera 下 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; // 修改前这四行 注释
/**
* 修改后 www.zzzyk.com
*/
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;
三 顺便在 还在这个包中的 CameraConfigurationManager 类中的setDesiredCameraParameters方法中添加一句
void setDesiredCameraParameters(Camera camera) {
Camera.Parameters parameters = camera.getParameters();
Log.d(TAG, "Setting preview size: " + cameraResolution);
parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
setFlash(parameters);
setZoom(parameters);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);// 框框中改横线是 修改的
}
四 ,在AndroidManifest.xml中,把CaptureActivity的属性android:screenOrientation="landscape"
改为
android:screenOrientation="portrait"
够详细了吧, 开发 二维码扫描的哥们 在搞不出来, 实在不知道说什么好了 。
但是在修改中存在一个问题, 若是 在上述第三个步骤中 加入 camera.setDisplayOrientation(90); 这句话报错时, 给zxing换一个核心包,若是还报错直接换个搞点版本的Android包就OK 了, 建议直接换成 高点的Android 包。
当然加入这句话不错的哥们 就不用管啦, 唉, 为了后人不走弯路,特别奉上。
补充:综合编程 , 其他综合 ,