点击下载该文件
在第一个场景第一帧中,加入了一段ActionScript。
这段ActionScript引入的类和包:
import com.oucsoft.qrcode.codec.util.ImageParser;
import flash.display.BitmapData;
import mx.services.*;
——第一个引入的是图像的解析类,它负责:把图像转换成黑白图像,然后转换为16进制串,最后再将16进制字符串作了一个压缩处理;第二行引入的是位图数据类BitmapData,用它来取得摄像头的拍照结果;第三行引入Web Service调用包。
摄像头的启动代码如下:
// -------- 摄像头 -------- //
var cam_video:Video;
my_cam.setMode(cam_video._width, cam_video._height, 10, true);
cam_video.attachVideo(my_cam);
点击了Scan按钮之后的处理如下:
// -------- 解析条码 -------- //
function scanBarcode():Void {
//var timer = getTimer();
//建立一个位图对象
var mybmp:BitmapData = new BitmapData(cam_video._width, cam_video._height, false, 0);
//取得条码图像
mybmp.draw(cam_video);
//调试,将取得的条码图像画出来
qrdebug_mc.attachBitmap(mybmp, 1);
//设置调试图像输出面板
//DebugCanvas.getCanvas().setMovieClip(_root.qrdebug_mc);
//解析图像
var parser:ImageParser = new ImageParser();
//var image:Array = parser.parseImage(mybmp);
parser.parseImage(mybmp);
var imageHex:String = parser.getImageHex();
var imageWidth:Number = parser.getWidth();
//trace(imageHex);
//trace(getTimer()-timer);
//定义WebService对象,第一个参数为wsdl地址,第二个参数绑定WebServiceLog对象
//var wsDecoder = new WebService("http://localhost/QRCodeWS/Decoder.asmx?WSDL", wsLog);
//可以使用相对路径
//var wsDecoder = new WebService("/QRCodeWS/Decoder.asmx?WSDL");
var wsDecoder = new WebService("http://qr.oucsoft.com/service/Decoder.asmx?WSDL");
//调用相应方法,并返回一个PendingCall对象,赋给UserObj
pendingObj = wsDecoder.DecodeHex(imageHex, imageWidth);
wsDecoder.onLoad = function() {
decResult_txt.text = "Decoding, please wait...";
//trace("正在进行解码...");
};
pendingObj.onResult = function(result) {
//如果失败返回值result为false,成功则返回相应实体,flash会自动Decode为AS化的对象
if (result) {
//decResult_txt.text = "解码结果:";
//trace("解码成功:");
decResult_txt.text = result;
//trace(result);
var url:String = result;
if (url.substr(0, 7).toLowerCase() == "http://" || url.substr(0, 8).toLowerCase() == "https://") {
decResult_txt.htmlText = "<a href=\""+url+"\""+">"+decResult_txt.text+"</a>";
//decResult_txt.url = url;
//getURL(url, "_blank");//自动跳转
}
} else {
//trace("解码失败!");
}
//trace(getTimer()-timer);
};
pendingObj.onFault = function(fault) {
trace(fault.faultCode+","+fault.faultstring);
};
}
——其中的下面几行就是调用了我们编写的图像处理类对获取的摄像头的拍照结果进行处理:
parser.parseImage(mybmp);
var imageHex:String = parser.getImageHex();
var imageWidth:Number = parser.getWidth();
——处理完毕后,获得压缩过的黑白图像的16进制字符串,保存在变量imageHex中;imageWidth则是图像的宽度。然后就是地用服务器端的QR Code解码Web Service接口了:
var wsDecoder = new WebService("http://qr.oucsoft.com/service/Decoder.asmx?WSDL");
//调用相应方法,并返回一个PendingCall对象,赋给UserObj
pendingObj = wsDecoder.DecodeHex(imageHex, imageWidth);
这个过程相当简单,下一篇文章中,我们来说说图像处理类:com.oucsoft.qrcode.codec.util.ImageParser。