【发布时间】:2011-10-20 21:49:46
【问题描述】:
我正在开发一个读取 QR 码的应用程序,我需要代码的方向。 ZXING 源指出,可以通过键 ORIENTATION
从哈希表 ResultMetaData 中获取方向现在,我的问题是当我运行以下命令时 getResultMetaData() 没有返回任何结果:
orientation = (Integer) Returned[v].getResultMetadata().get("ORIENTATION");
然而,在这上面的那一行,
points = Returned[v].getResultPoints();
工作得很好,所以我知道代码正在被读取,并且正在返回数据。
有没有人知道解决这个问题或获得方向的不同方法?
最后一点:我使用的是 QRCodeMultiReader,这就是为什么 Returned 是一个数组。
谢谢, 梭鲈
EDIT 我刚刚发现 getResultMetaData 只支持一维条码的方向,所以我想现在的问题是:如何获得二维码的方向?
EDIT #2这是获取旋转的代码(不支持透视)
ResultPoint a= points[1];
ResultPoint b= points[2];
ResultPoint c= points[0];
float distance = Math.abs(a.getX()-b.getX());
RectF rect = new RectF(a.getX(), a.getY(), a.getX()+distance, a.getY()+distance);
//Find the degree of the rotation that is needed
double z = Math.abs(a.getX()-b.getX());
double x = Math.abs(a.getY()-b.getY());
double theta = Math.atan(x/z);
if((b.getX()<a.getX())&&(b.getY()>a.getY())){//-+
theta=180-theta;
}else if((b.getX()<a.getX())&&(b.getY()<a.getY())){//--
theta=180+theta;
}else if((b.getX()>a.getX())&&(b.getY()<a.getY())){ //+-
theta=360-theta;
}
//theta stores the degree of rotation
【问题讨论】:
-
为了简单地解释行为:方向并不是真正描述条形码,而是在其中找到条形码的图像的方向。对于 QR 码,这是相当不必要的,因为它可以在图像的任何方向上找到。
-
@SeanOwen 我在代码上绘制了一个覆盖层,需要方向。
-
好的。这并没有改变关于方向在这里意味着什么的答案。
标签: android null qr-code zxing