zxing actionscript ライブラリを使用して、Flex Mobile アプリ用のバーコード スキャナーを実装しようとしている人が非常に多いと思います。私の問題は、実際のデバイスでカメラを適切に表示するだけで、かなりの時間を費やしていることです。Web カメラを使用してデスクトップでアプリを実行すると、ビデオ フィードが正常に表示されます。以下は、Galaxy Nexusで取得したもので、Nexus 7でも同様です.
私は主にこの例に取り組んできましたが、他のサイトからの提案も取り入れました: http://www.remotesynthesis.com/post.cfm/adding-a-qr-code-reader-in-flex-on-アンドロイド
すべてがビデオ オブジェクトへの同じ奇抜なフィードを生成します。これを修正するために私に何ができるか知っている人はいますか?
これは、この時点で明確な画像を取得しようとしている現在の形式のコードです (バーコードのジャンクはまだありません)。
スキャナー2.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:bs="com.expologic.barcodescanner"
title="Scanner" creationComplete="init(event)">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.core.UIComponent;
import com.expologic.barcodescanner.BarcodeScanner;
private var bs:BarcodeScanner;
private function init(e:Event):void {
bs = new BarcodeScanner();
bs.horizontalCenter = 0;
bs.verticalCenter = 0;
bs.height = 480;
bs.width = 640;
addElement(bs);
//To add a target to the center of the screen
var uic:UIComponent = new UIComponent();
this.addElement(uic);
uic.width = uic.height = 275;
uic.graphics.lineStyle(3,0xFF0000);
uic.graphics.drawRect(0,0,275,275);
uic.horizontalCenter = uic.verticalCenter = 0;
}
]]>
</fx:Script>
</s:View>
BarcodeScanner.as
package com.expologic.barcodescanner
{
import flash.events.Event;
import flash.media.Camera;
import flash.media.Video;
import spark.core.SpriteVisualElement;
public class BarcodeScanner extends SpriteVisualElement
{
private var _video:Video;
public function BarcodeScanner()
{
this.height = 480;
this.width = 640;
addEventListener(Event.ADDED_TO_STAGE, _addToStage);
}
private function _addToStage(e:Event):void {
_setupCamera();
}
private function _setupCamera():void
{
if(!_video)
{
_video = new Video(640, 480);
addChild(_video);
}
if(Camera.isSupported)
{
var cam:Camera = Camera.getCamera();
cam.setQuality(0, 100);
cam.setMode(640, 480, 30, false);
_video.attachCamera(cam);
}
}
}
}