Android携帯クライアントQRコードスキャン

3381 ワード

このプロジェクトはすでにアップグレードされています.
ZBarのコンパイルプロジェクトの新しいアドレス:https://github.com/SkillCollege/ZBarBuildProj
ZBarのサンプルアイテムの新しいアドレス:https://github.com/SkillCollege/ZBarScanProj
ZXing3.1.0バージョンのアイテムアドレス:https://github.com/SkillCollege/ZXingProject
ZBar復号を用いる場合、ZXing 3を用いる.1.0スキャン、ZXingProjのDecodeHandler復号モジュールを修正し、ZXingの復号をZBarに置き換えるだけでよい
次のようになります.
private void decode(byte[] data, int width, int height) {
        Size size = activity.getCameraManager().getPreviewSize();

        //         data    ,              
        byte[] rotatedData = new byte[data.length];
        for (int y = 0; y < size.height; y++) {
            for (int x = 0; x < size.width; x++)
                rotatedData[x * size.height + size.height - y - 1] = data[x + y * size.width];
        }

        //       
        int tmp = size.width;
        size.width = size.height;
        size.height = tmp;

        Rect rect = activity.getCropRect();

        ZBarDecoder zBarDecoder = new ZBarDecoder();
        String result = zBarDecoder.decodeCrop(rotatedData, size.width, size.height, rect.left, rect.top, rect.width(), rect.height());

        if (result != null) {
            if (null != activity.getHandler()) {
                Message msg = new Message();
                msg.obj = result;
                msg.what = R.id.decode_succeeded;
                activity.getHandler().sendMessage(msg);
            }
            // Message message = Message.obtain(activity.getHandler(),
            // R.id.decode_succeeded, result);
            // if (null != message) {
            // message.sendToTarget();
            // }
        } else {
            // Message message = Message.obtain(activity.getHandler(),
            // R.id.decode_failed);
            // if (null != message) {
            // message.sendToTarget();
            // }
            if (null != activity.getHandler()) {
                activity.getHandler().sendEmptyMessage(R.id.decode_failed);
            }
        }
    }
この文書は次のとおりです.https://github.com/SkillCollege
QrCodeScan
これはAndroid携帯電話クライアントのQRコードスキャンに関するソースコードで、効率的なZBar復号ライブラリを使用し、中国語の文字化けしを修復しました.
ZXingコード(カメラ管理機能を使用)が融合しています.
一、オープンソースZXingスキャンを使用する欠点
1、元のコードはクロススクリーンモードで、縦スクリーンに変更できるが、スキャンインタフェースのカスタマイズとマルチスクリーンの組み合わせはよくない
2、有効なスキャンエリアはコントロールしにくい.自分の技術が未熟なせいか、いい方法が見つからない.
3、ZXingはJavaが書いたもので、QRコードの解析効率はZBarほど速くない
二、iOSを使ってよく使うZBarスキャンを開発する欠点
1、ZBarはCで実現したQRコード解析であるが、中国語を解析する際に文字化けしてしまう
2、ZBarのスキャンインターフェースはカメラの制御に対してZXingパッケージの良いことがありません
以上の理由から,筆者は両者を組み合わせて,カメラをZXingで制御して画像を取得し,スキャンしたデータをZBarで解析し,最終的に現在の項目を形成することにした.
三、開発手順
まずZXingのCamera制御コードを剥離し、スキャンした元のデータを得ると、ZXingのViewFindViewは個人的にあまりよくない感じで、いっそ私はそれを削除しました.
xmlファイルを直接レイアウトすることで、マルチスクリーンのフィットが瞬時に解決します.また,走査レーザ線のアニメーション効果については,縦横スクリーンの制御はコードを少し変換するだけで実現できる.ZBarの中国語の文字化けしてどのように解決するべきですか?ネットで探したらZBarのqrcodetxtを修正する必要があることに気づいた.c中のコードISO-8859-1をGBKに変更すれば良い
四、使用方法
1、Eclipseを直接インポートして実行すればよい
2、Android Studioで運行されている場合、現れる
Couldn't load libzbar from loader dalvik.system.PathClassLoader findLibrary returned null

        :

A.  so        (src/main/jniLibs/armeabi/libzbar.so)

|src
|--main/
|----java/
|----res/
|----jniLibs/
|------armeabi
|--------libzbar.so

B.Rebuild Project

  :                     ZbarManager  。        (com.zbar.lib)