amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評(píng)論 :: 0 Trackbacks

          二維條形碼比普通的條形碼能保存更多的信息,已經(jīng)應(yīng)用到很多領(lǐng)域里面。例如手機(jī)電影票,就是一個(gè)嵌在彩信里面的二維碼圖像。南航也推出了網(wǎng)上辦理登機(jī)牌業(yè)務(wù),辦理完成之后往手機(jī)發(fā)送一條包含二維碼的彩信,到了機(jī)場(chǎng)就可以通過自助設(shè)備掃描二維碼,打印登機(jī)牌。
          然而,專業(yè)的二維碼掃描設(shè)備價(jià)格十分昂貴,最便宜的都在1000元以上,到淘寶上搜搜就知道了。借助Java和一個(gè)開源的庫,我們卻可以通過普通的網(wǎng)絡(luò)攝像頭實(shí)現(xiàn)相同的效果,成本只需要幾十塊。
          Open Source QR Code Library是一個(gè)開源的QR Code(二維條形碼的一種)生成和讀取的庫,官方網(wǎng)站為:http://qrcode.sourceforge.jp/,里面包含了生成和讀取QR Code的所有代碼,其中有個(gè)jmfexample就能實(shí)現(xiàn)通過攝像頭讀取QR Code,經(jīng)過本人嘗試,幾十塊的普通攝像頭效果已經(jīng)不錯(cuò)了,一次讀取幾百字節(jié)都沒問題。
          使用這個(gè)庫的步驟如下:
          1、到其官方網(wǎng)站下載回來;
          2、到sun的網(wǎng)站下載JMF包并安裝;
          3、插上攝像頭,打開我的電腦,查看是否出現(xiàn)“USB視頻設(shè)備”,然后打開,看攝像頭工作是否正常
          4、運(yùn)行JMF里面的JMF Registry程序,點(diǎn)擊“Detect Capture Devices”,查找視頻設(shè)備,查找到之后會(huì)在左邊的列表里出現(xiàn)“vfw:Microsoft WDM Image Capture (Win32):0”類似的設(shè)備,點(diǎn)擊就會(huì)在右邊出現(xiàn)其詳細(xì)信息,我的攝像頭是這樣的:
          Name = vfw:Microsoft WDM Image Capture (Win32):0

          Locator = vfw://0

          Output Formats---->

          0. javax.media.format.YUVFormat
          ? YUV Video Format: Size = java.awt.Dimension[width=640,height=480] MaxDataLength = 614400 DataType = class [B yuvType = 32 StrideY = 1280 StrideUV = 1280 OffsetY = 0 OffsetU = 1 OffsetV = 3

          1. javax.media.format.YUVFormat
          ? YUV Video Format: Size = java.awt.Dimension[width=160,height=120] MaxDataLength = 38400 DataType = class [B yuvType = 32 StrideY = 320 StrideUV = 320 OffsetY = 0 OffsetU = 1 OffsetV = 3

          2. javax.media.format.YUVFormat
          ? YUV Video Format: Size = java.awt.Dimension[width=176,height=144] MaxDataLength = 50688 DataType = class [B yuvType = 32 StrideY = 352 StrideUV = 352 OffsetY = 0 OffsetU = 1 OffsetV = 3

          3. javax.media.format.YUVFormat
          ? YUV Video Format: Size = java.awt.Dimension[width=320,height=240] MaxDataLength = 153600 DataType = class [B yuvType = 32 StrideY = 640 StrideUV = 640 OffsetY = 0 OffsetU = 1 OffsetV = 3

          4. javax.media.format.YUVFormat
          ? YUV Video Format: Size = java.awt.Dimension[width=352,height=288] MaxDataLength = 202752 DataType = class [B yuvType = 32 StrideY = 704 StrideUV = 704 OffsetY = 0 OffsetU = 1 OffsetV = 3

          注意,其中Output Formats都是javax.media.format.YUVFormat,而QR Code Library里默認(rèn)的設(shè)備不是這種格式的,所以需要對(duì)源碼作一定的修改。

          5、用Eclipse打開QR Code Library的源碼,作出一些適當(dāng)?shù)男薷模?br />如果攝像頭是上面所說的只支持YUV格式,則需要修改jp.sourceforge.qrcode.example.jmf.camDataSource.java,把setMainSource函數(shù)里的
          VideoFormat vidformat = new VideoFormat(VideoFormat.RGB);
          修改為
          VideoFormat vidformat = new VideoFormat(VideoFormat.YUV);
          否則永遠(yuǎn)也找不到攝像頭。

          6、把JMF包里的jmf.jar放到Classpath里
          7、執(zhí)行jp.sourceforge.qrcode.example.jmf.jmfexample,搞定

          當(dāng)然,由于源碼開放的,只要符合許可,你想怎么改都行,可以把它嵌入到某個(gè)應(yīng)用程序里面,這個(gè)程序就具有了掃描QR Code的功能了。

          posted on 2009-04-02 16:22 amp@java 閱讀(5950) 評(píng)論(13)  編輯  收藏 所屬分類: Java common

          評(píng)論

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2009-04-08 21:32 koma
          呵呵 性能是很差的我們2年前就測(cè)試了這個(gè)程序  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2009-05-21 18:35 amp@java
          @koma
          呵呵,我覺得比專業(yè)的掃描儀還好用,可以連續(xù)掃
            回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2009-06-09 16:33 wu
          此程序開了幾分鐘,然后會(huì)屏幕一片空白,無法使用,請(qǐng)問博主是否遇到過這情況,如何解決?  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2009-06-10 08:55 wu
          jmf開一陣子也是變黑,或許是我中星微攝像頭休眠了?  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2009-06-10 13:55 wu
          確實(shí)是攝像頭問題,換了一個(gè)好了,打擾!  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2009-06-13 16:56 shengshu
          @koma
          有沒有更好的介紹?!~  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器[未登錄] 2009-07-24 11:34 蟲子
          那個(gè)包,能用來生成QR圖嗎??要怎么用???  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2009-07-28 09:03 amplifier
          @蟲子
          不能生成,只能讀取
          生成QRCode的有另外的包,搜一下有很多  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器[未登錄] 2009-09-16 16:04 seven
          請(qǐng)問讀取之后能不能把信息寫進(jìn)數(shù)據(jù)庫?  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2009-09-18 22:40 amplifier
          @seven
          當(dāng)然可以,讀出來的都是文本,你想怎么處理都可以  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器[未登錄] 2010-03-03 17:25 Fred
          我試過了基本上很難讀出來,用到現(xiàn)在就讀出過2回,中文而且有亂碼。攝像頭也是1000W像素的,非常清晰。

          能給個(gè)導(dǎo)出的jar嗎?ad#fengsage.cn 謝謝  回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器 2012-03-20 16:44
          運(yùn)行找不到,
          Exception in thread "main" java.lang.NullPointerException
          at javax.media.Manager.createProcessor(Manager.java:663)
          at jmf.camDataSource.startProcessing(camDataSource.java:68)
          at jmf.jmfexample.<init>(jmfexample.java:18)
          at jmf.jmfexample.main(jmfexample.java:30)
          怎么回事啊,
          攝像頭沒事,JMF也沒事
            回復(fù)  更多評(píng)論
            

          # re: 用JAVA做一個(gè)便宜好用的二維碼掃描器[未登錄] 2012-03-23 11:42 a
          我試過了,不行,報(bào)錯(cuò),
          有做出來的嗎?求!!發(fā)一個(gè)
          465955146@qq.com  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 涞水县| 鄂托克前旗| 思南县| 稷山县| 泽州县| 苍溪县| 贵南县| 南汇区| 双辽市| 上高县| 永城市| 禹城市| 南靖县| 吴江市| 富裕县| 托克托县| 克什克腾旗| 湘阴县| 鄄城县| 新余市| 吴桥县| 奇台县| 德令哈市| 永仁县| 睢宁县| 周至县| 吉安市| 渭南市| 东港市| 平远县| 郓城县| 囊谦县| 清河县| 濮阳市| 剑川县| 高雄县| 永清县| 多伦县| 长丰县| 固镇县| 延寿县|