Highlighted

How to read QR codes with AIR?

Explorer ,
May 20, 2016

Copy link to clipboard

Copied

Hello,

I need to create an AIR application developed with Adobe Animate which can read QR codes.

I found some code samples in AS3 based on "LOGOSWARE Class Library", but this only can read basic QR Codes, but not QR codes with a lot of information, such as the sample I have added in this post.

There is some other library to read QR codes? Can someone help me?

qr.jpg

The code that I'm using looks like:

import flash.display.*;

import flash.events.*;

import flash.text.*;

import flash.media.*;

import flash.utils.*;

import flash.filters.*;

import flash.geom.*;

import flash.net.URLRequest;

import flash.net.navigateToURL;

import com.logosware.event.QRdecoderEvent;

import com.logosware.event.QRreaderEvent;

import com.logosware.utils.QRcode.GetQRimage;

import com.logosware.utils.QRcode.QRdecode;

private function onStart():void {

cameraView = buildCameraView();

resultView = buildResultView();

cameraView.x = (stageWidth - cameraView.width) / 2;

cameraView.y = -15;

this.addChild(qrHome_mc);

this.addChild( cameraView );

this.addChild( resultView );

resultView.visible = false;

getQRimage = new GetQRimage(video);

getQRimage.addEventListener(QRreaderEvent.QR_IMAGE_READ_COMPLETE, onQrImageReadComplete);

qrDecode.addEventListener(QRdecoderEvent.QR_DECODE_COMPLETE, onQrDecodeComplete);

redTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onRedTimer );

this.addEventListener(Event.ENTER_FRAME, onEnterFrame);

}

private function buildCameraView():Sprite {

camera.setQuality(0, 100);

camera.setMode(SRC_SIZE, SRC_SIZE, 24, true );

video.attachCamera( camera );

var sprite:Sprite = new Sprite();

var videoHolder:Sprite = new Sprite();

videoHolder.addChild( video );

videoHolder.x = videoHolder.y = 15;

freezeImage = new Bitmap(new BitmapData(SRC_SIZE, SRC_SIZE));

videoHolder.addChild( freezeImage );

freezeImage.visible = false;

red.graphics.lineStyle(2, 0xFF0000);

red.graphics.drawRect(videoHolder.x - 5 , videoHolder.y , videoHolder.width - videoHolder.x - 5, videoHolder.height - videoHolder.y - 10);// .drawPath(Vector.<int>([1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2]), Vector.<Number>([30, 60, 30, 30, 60, 30, 290, 60, 290, 30, 260, 30, 30, 260, 30, 290, 60, 290, 290, 260, 290, 290, 260, 290]));

blue.graphics.lineStyle(2, 0x0000FF);

blue.graphics.drawRect(videoHolder.x - 5, videoHolder.y , videoHolder.width - videoHolder.x - 5, videoHolder.height - videoHolder.y - 10);// .drawPath(Vector.<int>([1,2,2,1,2,2,1,2,2,1,2,2]), Vector.<Number>([30,60,30,30,60,30,290,60,290,30,260,30,30,260,30,290,60,290,290,260,290,290,260,290]));

  sprite.addChild( videoHolder );

  sprite.addChild( red );

  sprite.addChild( blue );

  blue.alpha = 0;

  red.x = red.y = 15;

  blue.x = blue.y = 15;

  return sprite;

}

private function buildResultView():Sprite {

var sprite:Sprite = new Sprite();

sprite.graphics.beginGradientFill(GradientType.LINEAR, [0xDDDDEE, 0xBBBBCC], [0.9, 0.9], [0, 255], new Matrix(0, 0.1, -0.1, 0, 0, 150));

sprite.graphics.drawRoundRect(0, 0, 280, 280, 20);

sprite.addChild( textArea );

textArea.width = 250;

textArea.height = 200;

textArea.wordWrap = true;

textArea.multiline = true;

textArea.border = true;

textArea.background = true;

textArea.backgroundColor = 0xFFFFFF;

textArea.x = textArea.y = 15;

var btnText:TextField = new TextField();

btnText.autoSize = TextFieldAutoSize.LEFT;

btnText.text = "CLOSE";

btnText.selectable = false;

var btnSprite:Sprite = new Sprite();

btnSprite.addChild(btnText);

btnSprite.graphics.lineStyle(1);

btnSprite.graphics.beginGradientFill(GradientType.LINEAR, [0xEEEEEE, 0xCCCCCC], [0.9, 0.9], [0, 255], new Matrix(0, 0.01, -0.01, 0, 0, 10));

btnSprite.graphics.drawRoundRect(0, 0, 80, 20, 8);

btnText.x = 0.5 * (btnSprite.width - btnText.width);

btnText.y = 0.5 * (btnSprite.height - btnText.height);

btnSprite.x = 0.5 * ( 280 - 80 );

btnSprite.y = 240;

btnSprite.buttonMode = true;

btnSprite.mouseChildren = false;

btnSprite.addEventListener(MouseEvent.CLICK, onClose);

sprite.addChild( btnSprite );

sprite.addChild( textArea );

sprite.x = sprite.y = 35;

sprite.filters = [new DropShadowFilter(4.0,45,0,0.875)];

return sprite;

}

private function onEnterFrame(e: Event):void {

if (camera != null)

{

  if ( camera.currentFPS > 0 )

  {

   getQRimage.process();

  }

}

}

private function onQrImageReadComplete(e:QRreaderEvent):void {

trace("read complete");

qrDecode.setQR(e.data);

qrDecode.startDecode();

}

private function onQrDecodeComplete(e:QRdecoderEvent):void {

blue.alpha = 1.0;

redTimer.reset();

redTimer.start();

textArray.shift();

textArray.push( e.data );

if ( textArray[0] == textArray[1] && textArray[1] == textArray[2] ) {

  navigateToURL(new URLRequest(e.data), "_blank");

  this.removeEventListener(Event.ENTER_FRAME, onEnterFrame);

  redTimer.stop();

  camera = null;

  textArray = ["", "", ""];

  freezeImage.visible = false;

  cameraView.filters = [];

}

}

TOPICS
Development

Views

404

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more

How to read QR codes with AIR?

Explorer ,
May 20, 2016

Copy link to clipboard

Copied

Hello,

I need to create an AIR application developed with Adobe Animate which can read QR codes.

I found some code samples in AS3 based on "LOGOSWARE Class Library", but this only can read basic QR Codes, but not QR codes with a lot of information, such as the sample I have added in this post.

There is some other library to read QR codes? Can someone help me?

qr.jpg

The code that I'm using looks like:

import flash.display.*;

import flash.events.*;

import flash.text.*;

import flash.media.*;

import flash.utils.*;

import flash.filters.*;

import flash.geom.*;

import flash.net.URLRequest;

import flash.net.navigateToURL;

import com.logosware.event.QRdecoderEvent;

import com.logosware.event.QRreaderEvent;

import com.logosware.utils.QRcode.GetQRimage;

import com.logosware.utils.QRcode.QRdecode;

private function onStart():void {

cameraView = buildCameraView();

resultView = buildResultView();

cameraView.x = (stageWidth - cameraView.width) / 2;

cameraView.y = -15;

this.addChild(qrHome_mc);

this.addChild( cameraView );

this.addChild( resultView );

resultView.visible = false;

getQRimage = new GetQRimage(video);

getQRimage.addEventListener(QRreaderEvent.QR_IMAGE_READ_COMPLETE, onQrImageReadComplete);

qrDecode.addEventListener(QRdecoderEvent.QR_DECODE_COMPLETE, onQrDecodeComplete);

redTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onRedTimer );

this.addEventListener(Event.ENTER_FRAME, onEnterFrame);

}

private function buildCameraView():Sprite {

camera.setQuality(0, 100);

camera.setMode(SRC_SIZE, SRC_SIZE, 24, true );

video.attachCamera( camera );

var sprite:Sprite = new Sprite();

var videoHolder:Sprite = new Sprite();

videoHolder.addChild( video );

videoHolder.x = videoHolder.y = 15;

freezeImage = new Bitmap(new BitmapData(SRC_SIZE, SRC_SIZE));

videoHolder.addChild( freezeImage );

freezeImage.visible = false;

red.graphics.lineStyle(2, 0xFF0000);

red.graphics.drawRect(videoHolder.x - 5 , videoHolder.y , videoHolder.width - videoHolder.x - 5, videoHolder.height - videoHolder.y - 10);// .drawPath(Vector.<int>([1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2]), Vector.<Number>([30, 60, 30, 30, 60, 30, 290, 60, 290, 30, 260, 30, 30, 260, 30, 290, 60, 290, 290, 260, 290, 290, 260, 290]));

blue.graphics.lineStyle(2, 0x0000FF);

blue.graphics.drawRect(videoHolder.x - 5, videoHolder.y , videoHolder.width - videoHolder.x - 5, videoHolder.height - videoHolder.y - 10);// .drawPath(Vector.<int>([1,2,2,1,2,2,1,2,2,1,2,2]), Vector.<Number>([30,60,30,30,60,30,290,60,290,30,260,30,30,260,30,290,60,290,290,260,290,290,260,290]));

  sprite.addChild( videoHolder );

  sprite.addChild( red );

  sprite.addChild( blue );

  blue.alpha = 0;

  red.x = red.y = 15;

  blue.x = blue.y = 15;

  return sprite;

}

private function buildResultView():Sprite {

var sprite:Sprite = new Sprite();

sprite.graphics.beginGradientFill(GradientType.LINEAR, [0xDDDDEE, 0xBBBBCC], [0.9, 0.9], [0, 255], new Matrix(0, 0.1, -0.1, 0, 0, 150));

sprite.graphics.drawRoundRect(0, 0, 280, 280, 20);

sprite.addChild( textArea );

textArea.width = 250;

textArea.height = 200;

textArea.wordWrap = true;

textArea.multiline = true;

textArea.border = true;

textArea.background = true;

textArea.backgroundColor = 0xFFFFFF;

textArea.x = textArea.y = 15;

var btnText:TextField = new TextField();

btnText.autoSize = TextFieldAutoSize.LEFT;

btnText.text = "CLOSE";

btnText.selectable = false;

var btnSprite:Sprite = new Sprite();

btnSprite.addChild(btnText);

btnSprite.graphics.lineStyle(1);

btnSprite.graphics.beginGradientFill(GradientType.LINEAR, [0xEEEEEE, 0xCCCCCC], [0.9, 0.9], [0, 255], new Matrix(0, 0.01, -0.01, 0, 0, 10));

btnSprite.graphics.drawRoundRect(0, 0, 80, 20, 8);

btnText.x = 0.5 * (btnSprite.width - btnText.width);

btnText.y = 0.5 * (btnSprite.height - btnText.height);

btnSprite.x = 0.5 * ( 280 - 80 );

btnSprite.y = 240;

btnSprite.buttonMode = true;

btnSprite.mouseChildren = false;

btnSprite.addEventListener(MouseEvent.CLICK, onClose);

sprite.addChild( btnSprite );

sprite.addChild( textArea );

sprite.x = sprite.y = 35;

sprite.filters = [new DropShadowFilter(4.0,45,0,0.875)];

return sprite;

}

private function onEnterFrame(e: Event):void {

if (camera != null)

{

  if ( camera.currentFPS > 0 )

  {

   getQRimage.process();

  }

}

}

private function onQrImageReadComplete(e:QRreaderEvent):void {

trace("read complete");

qrDecode.setQR(e.data);

qrDecode.startDecode();

}

private function onQrDecodeComplete(e:QRdecoderEvent):void {

blue.alpha = 1.0;

redTimer.reset();

redTimer.start();

textArray.shift();

textArray.push( e.data );

if ( textArray[0] == textArray[1] && textArray[1] == textArray[2] ) {

  navigateToURL(new URLRequest(e.data), "_blank");

  this.removeEventListener(Event.ENTER_FRAME, onEnterFrame);

  redTimer.stop();

  camera = null;

  textArray = ["", "", ""];

  freezeImage.visible = false;

  cameraView.filters = [];

}

}

TOPICS
Development

Views

405

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
May 20, 2016 0

Have something to add?

Join the conversation