Android zxing方向:结果元数据为空,获取旋转/方向

Android zxing方向:结果元数据为空,获取旋转/方向,android,null,qr-code,zxing,Android,Null,Qr Code,Zxing,我正在开发一款可以读取二维码的应用程序,我需要二维码的方向。 ZXING源声明可以通过键方向从哈希表ResultMetaData获得方向 现在,我的问题是运行以下程序时,getResultMetaData()没有返回任何结果: orientation = (Integer) Returned[v].getResultMetadata().get("ORIENTATION"); 但是,这条线正上方, points = Returned[v].getResultPoints(); 工作正常,所以

我正在开发一款可以读取二维码的应用程序,我需要二维码的方向。 ZXING源声明可以通过键方向从哈希表ResultMetaData获得方向

现在,我的问题是运行以下程序时,getResultMetaData()没有返回任何结果:

orientation = (Integer) Returned[v].getResultMetadata().get("ORIENTATION");
但是,这条线正上方,

points = Returned[v].getResultPoints();
工作正常,所以我知道代码正在读取,并且正在返回数据

有没有人知道这个问题的解决方法或者获取方向的不同方法

最后一点注意:我使用的是QRCodeMultiReader,这就是返回的是数组的原因

谢谢, 赞德

编辑我刚刚发现getResultMetaData只支持一维条码的方向,所以我想现在的问题是:如何获得二维码的方向

编辑#2以下是获取旋转的代码(不支持透视)

resultpointa=点[1];
结果b点=点[2];
结果c点=点[0];
浮动距离=Math.abs(a.getX()-b.getX());
RectF rect=new RectF(a.getX(),a.getY(),a.getX()+距离,a.getY()+距离);
//找到所需的旋转度
double z=Math.abs(a.getX()-b.getX());
double x=Math.abs(a.getY()-b.getY());
双θ=Math.atan(x/z);
如果((b.getX()a.getY()){/-+
θ=180θ;

}否则,如果((b.getX()Result)有一个getResultPoints方法。这将返回二维码中查找器模式(黑色大方块)的位置。由于这些模式显示在代码的左上角、右上角和左下角,您可以找出它们描述的方向。ResultPoint类中有一些静态辅助方法


对于没有透视图的图像,三个点应该描述一个等腰直角三角形。如果有透视图,事情会变得更复杂。

正确的计算只考虑a点和b点之间的线段以及坐标轴之间定义的角度。它根据象限调整度数。Ne进行此计算时,需要使用“距离”或“矩形”变量:

ResultPoint a= points[1];
ResultPoint b= points[2];
ResultPoint c= points[0];

double z = Math.abs(a.getX()-b.getX());
double x = Math.abs(a.getY()-b.getY());
double theta = Math.toDegrees(Math.atan(x/z));

        // Quadrants 0 and 1
        if(a.getY() > b.getY()) {
            if(a.getX() > b.getX()) {
                theta = 90 + (90 - theta);
            }
        }
        // Quadrants 2 or 3
        else {
            if (a.getX() > b.getX()) {
                theta = 180 + theta;
            }
            else {
                theta = 360 - theta;
            }
        }

        return theta;

简单解释行为:方向并不是真正描述条形码,而是找到条形码的图像的方向。对于二维码来说,这是不必要的,因为它可以在图像的任何方向找到。@SeanOwen我在代码上画一个覆盖图,方向是必需的。好的,这不会改变e关于方向在这里意味着什么的答案。相关问题:正确,尽管它们实际上按左下角、左上角、右上角的顺序出现。右下角对齐模式显示为第四个元素(如果存在),除版本1二维码外,其他所有元素都会显示。
ResultPoint a= points[1];
ResultPoint b= points[2];
ResultPoint c= points[0];

double z = Math.abs(a.getX()-b.getX());
double x = Math.abs(a.getY()-b.getY());
double theta = Math.toDegrees(Math.atan(x/z));

        // Quadrants 0 and 1
        if(a.getY() > b.getY()) {
            if(a.getX() > b.getX()) {
                theta = 90 + (90 - theta);
            }
        }
        // Quadrants 2 or 3
        else {
            if (a.getX() > b.getX()) {
                theta = 180 + theta;
            }
            else {
                theta = 360 - theta;
            }
        }

        return theta;