现在的位置: 首页 > 综合 > 正文

用flash获取摄像头照出来的图像变形的问题解决方法

2013年08月10日 ⁄ 综合 ⁄ 共 4080字 ⁄ 字号 评论关闭

上次的代码发现原来照出来的图像比例有点不对,客户不满意,就查action script关于这些方法的参数的使用,发现,调来调去都不行,在网上查了好久,终于发现一位高手发的贴,我把他的url发出来,顺便也把代码发一下:

URL:

http://www.blueidea.com/tech/multimedia/2005/3116.asp

他的代码是:

1)出现比例出问题前的代码是:

var my_video:Video;

my_video._x=100;

my_video._y=40;

var my_cam:Camera = Camera.get();

my_cam.setMode(180, 140, 10, true);

my_video.attachVideo(my_cam);



shutter.onRelease = function() {

 myBitmap = new flash.display.BitmapData(180, 240, true, 0);

 myBitmap.draw(my_video);

 var tempObj = _root.createEmptyMovieClip("photo", 100);

 tempObj._x = 300;

 tempObj._y = 40;

 tempObj.attachBitmap(myBitmap, 1, "always", true);

};
2)修正后是:
var my_video:Video;

my_video._x=100;

my_video._y=40;

var my_cam:Camera = Camera.get();

my_cam.setMode(180, 140, 10, true);

my_video.attachVideo(my_cam);



shutter.onRelease = function() {

 myBitmap = new flash.display.BitmapData(160, 120, true, 0);

 myBitmap.draw(my_video);

 var tempObj = _root.createEmptyMovieClip("photo", 100);

 tempObj._x = 300;

 tempObj._y = 40;

 tempObj._width= 180;

 tempObj._height = 240;

 tempObj.attachBitmap(myBitmap, 1, "always", true);

};
我修改后的代码如下:
//init variable    

cameraW = new Number(180);    

cameraH = new Number(140);

photoW = new Number(160);    

photoH = new Number(120);



var my_cam:Camera = Camera.get();

my_cam.setMode(cameraW, cameraH, 10, true);



var my_video:Video;

my_video.attachVideo(my_cam);

var camera_lbl:mx.controls.Label;

var cameras_cb:mx.controls.ComboBox;

camera_lbl.text = my_cam.name;

cameras_cb.dataProvider = Camera.names;

function changeCamera():Void {

    my_cam = Camera.get(cameras_cb.selectedIndex);

	my_cam.setMode(cameraW, cameraH, 10, true);

    my_video.attachVideo(my_cam);

    camera_lbl.text = my_cam.name;

}

cameras_cb.addEventListener("change", changeCamera);

camera_lbl.setStyle("fontSize", 9);

cameras_cb.setStyle("fontSize", 9);



//该对象用于实现发送数据到网页可get或post    

var lv:LoadVars;    

lv = new LoadVars(); 



btnSavePic.onRelease = function()

{      

    saveCamera();    

	//getURL("http://localhost/CaptureAndSignatureWebApp/pageb.aspx", "_blank", "GET");

} 



function saveCamera()

{     

    //新建一个bitmapdate对象并获取video上的图像信息    

    lv.bm = new flash.display.BitmapData(photoW, photoH,true, 0);       

    lv.bm.draw(my_video);     

    //photoPreview是在场景中的一个Movie clip实例,用于输出bitmapdate实现照片预缆    

    photoPreview.attachBitmap(lv.bm, 1);

	photoPreview._width=photoW;

	photoPreview._height=photoH;

	trace(lv.bm.height);    

    trace(lv.bm.width); 

	//getURL("http://www.macromedia.com", "_blank", "GET");

}



btnUpload.onRelease = function()

{

	SendPic();

}



btn1.onRelease = function()

{

	SendPic2();

}



function SendPic2()

{

	getURL("http://localhost/CaptureAndSignatureWebApp/pageb.aspx?aa=aabb", "_blank", "GET");

}



function SendPic()

{

    //loading._visible =true;    

	//getURL("http://localhost/CaptureAndSignatureWebApp/pageb.aspx?aa=aabb", "_blank", "GET");

	

    //读取图片矩形范围的像素信息,并以字符串的形式连接起来 begin    

    i = lv.bm.height;    

	//trace("i: " + i.toString());

    j = lv.bm.width; 

	//trace("j: " + j.toString());

	//trace("a: " + i.toString());

	//trace("b: " + j.toString());

    rgb_array = "";    

    for (var m = i - 1; m >= 0; m--)    

	//for (y = 10 - 1; y >= 0; y--)    

    {   

		trace(rgb_array);

        for (var n = 0; n < j; n ++)    

		//for (x = 0; x < 10; x++)

        {   

			//trace("m: " + m.toString());

			//trace("n: " + n.toString());

            color = lv.bm.getPixel(n, m).toString(16);    

			//trace(color);

			//trace(rgb_array);

            rgb_array = rgb_array + (color + ",");    

        } // end of for  

		

		//trace(rgb_array);

    } // end of for    

    lv.height = i;    

    lv.width = j;    

    lv.rgb_array = rgb_array;    

	camera_lbl.text = rgb_array;

	

	now_date = new Date();

	//now_date.getDate()

	

	//getURL("http://localhost/CaptureAndSignatureWebApp/pageb.aspx?passVal=1", "_blank", "POST");    

    //读取图片矩形范围的像素信息,并以字符串的形式连接起来 end    



	//getURL("javascript:alert('Step_1')"); 

    //发送到要处理的页面URL,可以在页面通过Request.Form["名称"]获取值,如:Request.Form["rgb_array"]    

    lv.sendAndLoad("http://localhost/CaptureAndSignatureWebApp/pageb.aspx?Val=" + now_date.getTime(), lv, "POST");    

   

    //当页面返回信息即页面处理完成后,触发的行为     

    lv.onLoad = function (success)    

	//if(lv.loaded == true)

    {    

		if (success)    

		{

			getURL("http://localhost/CaptureAndSignatureWebApp/pageb.aspx?Val=" + now_date.getTime(), "_blank", "POST");

			//getURL("javascript:alert('Success')");   

			getURL("javascript:window.location.reload();"); 

		}

		/*

        if (success)    

        {    

            //跳转到其他页面    

            //getURL("http://localhost/CaptureAndSignatureWebApp/pageb.aspx", "_self");    

			getURL("http://localhost/CaptureAndSignatureWebApp/pageb.aspx?passVal=1", "_blank", "POST");

        }

		else

		{

			getURL("javascript:alert('Not Success')");   

		}

		*/

    }

	

}

但我有一个疑问,为什么width和height要设成160和120,这个没有搞懂,但猜测是跟摄像头的4:3比例有关系,本来想问一下那个URL里的作者,但又不想注册,真是的

 

 

 还有就是如果真正用时,请把action script中的trace去掉,会影响速度

 

抱歉!评论已关闭.