作者vampirewalk (vampire)
看板MacDev
标题Re: [问题] zbarSDK的问题(QR Code)
时间Sat Sep 28 14:10:05 2013
※ 引述《fightword (呼啦啦~)》之铭言:
: 请教一下有用过zbarSDK的大大
: zbarsdk作QRCODE时,
: 扫瞄可以设范围吗?
: 就是
: -----------------
: |
: |
: --------- |
: | 扫瞄 | |
: | 区域 | |
: | | |
: --------- |
: |
: camera |
: View |
: ----------------
: 整个View是相机的画面
: 然後只有扫瞄区域侦测到的才会有反应
: 或有其他library(free)可以推荐的 谢谢
一年多前有做过类似的功能,如有记错的地方还请海涵。
首先,我假设你是使用ZBarReaderView来做cameraView。
在ZBarReaderView里有个property叫做scanCrop,就是用来设定扫瞄的区域。
见zbar文件
http://zbar.sourceforge.net/iphone/sdkdoc/ZBarReaderView.html#scanCrop__CGRect
CGRect scanCrop
The region of the video image that will be scanned,
in normalized image coordinates.
Note that the video image is in landscape mode (default {{0, 0}, {1, 1}})
这个属性必须填入scanView相对於ZBarReaderView的比例,而且是以landscape mode
下去计算。
根据我之前在网路上找到的资料,在landscape orientation下可以这样使用
CGFloat x,y,width,height;
x = scanView.frame.origin.x / readerView.bounds.size.width;
y = scanView.frame.origin.y / readerView.bounds.size.height;
width = scanView.frame.size.width / readerView.bounds.size.width;
height = scanView.frame.size.height / readerView.bounds.size.height;
readerView.scanCrop = CGRectMake(x, y, width, height);
在portrait orientation下,由於zbar还是会以lanscape orientation的比例去算
所以要自己做转换
CGFloat x = CGRectGetX(scanView.frame);
CGFloat y = CGRectGetY(scanView.frame);
CGFloat width = CGRectGetWidth(scanView.frame);
CGFloat height = CGRectGetHeight(scanView.frame);
landscapeX = y / readerView.bounds.size.width;
landscapeY = 1 - (x+width) / readerView.bounds.size.height;
landscapeWidth = height / readerView.bounds.size.width;
landscapeHeight = width / readerView.bounds.size.height;
readerView.scanCrop =
CGRectMake(landscapeX, landscapeY, landscapeWidth, landscapeHeight);
至於为什麽这样转,其实拿纸跟笔画个图,想办法把portrait的scanView frame转成
lanscape的scanView frame就懂了。
参考资料
zbar usage
http://www.ikoding.com/using-zbarsdk-in-ios/
landscape
http://goo.gl/a1yq9u
portrait,这一篇x, y 是对的,但height与width计算方式可能有误,见下面连结
http://goo.gl/aq85Vn
看这篇spadix的回应,作者只有把height跟width交换
http://sourceforge.net/p/zbar/support-requests/34/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.68.117.86
※ 编辑: vampirewalk 来自: 219.68.117.86 (09/28 14:14)
※ 编辑: vampirewalk 来自: 219.68.117.86 (09/28 14:15)
※ 编辑: vampirewalk 来自: 219.68.117.86 (09/28 14:16)
※ 编辑: vampirewalk 来自: 219.68.117.86 (09/28 14:17)
※ 编辑: vampirewalk 来自: 219.68.117.86 (09/28 14:19)
※ 编辑: vampirewalk 来自: 219.68.117.86 (09/28 14:19)
※ 编辑: vampirewalk 来自: 219.68.117.86 (09/28 14:20)
1F:推 fightword:感谢 我再研究一下 谢谢 09/28 18:03