Actionscript 3 将缩放视频中的原始位图数据保存到AS3中
我有一个flash photo booth(网络摄像头)应用程序,我正在尝试整理它,但在尝试从缩小的视频窗口保存640x480图像时似乎遇到了问题。视频似乎缩小得很好,但当我将其绘制为位图时,它会进一步缩小照片,因此我必须创建一个2.0的矩阵比例,以将其调整回640x480,我不确定这样做是否会影响图像质量。我不想使用任何调整大小的技巧(尤其是放大) 我是AS3新手,请原谅我Actionscript 3 将缩放视频中的原始位图数据保存到AS3中,actionscript-3,flash,webcam,scaling,bitmapdata,Actionscript 3,Flash,Webcam,Scaling,Bitmapdata,我有一个flash photo booth(网络摄像头)应用程序,我正在尝试整理它,但在尝试从缩小的视频窗口保存640x480图像时似乎遇到了问题。视频似乎缩小得很好,但当我将其绘制为位图时,它会进一步缩小照片,因此我必须创建一个2.0的矩阵比例,以将其调整回640x480,我不确定这样做是否会影响图像质量。我不想使用任何调整大小的技巧(尤其是放大) 我是AS3新手,请原谅我 import flash.display.Bitmap; import flash.display.BitmapData
import flash.display.Bitmap;
import flash.display.BitmapData;
import com.adobe.images.JPGEncoder;
var cam:Camera = Camera.getCamera();
cam.setQuality(0, 100);
cam.setMode(640,480,30,true); // setMode(videoWidth, videoHeight, video fps, favor area)
var video:Video = new Video();
video.attachCamera(cam);
video.x = 382;
video.y = 225;
video.width = 256;
video.height = 192;
addChild(video);
var bitmapData:BitmapData = new BitmapData(640,480);
var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.x = 648;
bitmap.y = 225;
bitmap.width = 256;
bitmap.height = 192;
addChildAt(bitmap, 18);
photoCapture.buttonMode = true;
photoCapture.addEventListener(MouseEvent.CLICK,captureImage);
这是肮脏的部分
function captureImage(e:MouseEvent):void {
var scale:Number=2.0;
var matrix:Matrix = new Matrix();
matrix.scale(scale, scale);
bitmapData.draw(video, matrix, null, null, null, true);
var jpgEncoder:JPGEncoder=new JPGEncoder(100);
var byteArray:ByteArray=jpgEncoder.encode(bitmapData);
var fileReference:FileReference=new FileReference();
fileReference.save(byteArray, ".jpg");
}
基本上,我只需要两个约256x192的小盒子,显示视频流(640x480)和捕获的照片(640x480),当我保存它时,实际上会保存一个640x480图像
var video:Video = new Video(640, 480);
这样可以避免使用矩阵。默认情况下,视频为320x240
这样可以避免使用矩阵。视频默认为320x240。- 首先创建一个视频256x192
- 然后创建位图数据640x480
- 然后将此位图数据(实际上是位图)收缩到256x192
- 然后你试着把一个小视频画成一个大位图(数据)——难怪你要放大
private var cam:Camera;
private var myVideo:Video;
private function attachCamera():void
{
cam = Camera.getCamera();
cam.setMode(8192,6144,30,true);
cam.setQuality(0,100);
myVideo = new Video(160,120);
//Flip preview on camera and result!
var flip:Matrix = new Matrix();
flip.scale(-1,1)
flip.translate(myVideo.width,0)
myVideo.transform.matrix = flip;
myVideo.attachCamera(cam);
videoDisplay.addChild(myVideo);
}
private function takePicture():void
{
var bd:BitmapData = new BitmapData(cam.width,cam.height);
//fill db with source bitmap!!!
cam.drawToBitmapData(bd)
//Then the bd contains the highest possible camera source!
// But videoDisplay show's small preview!
}
如果希望最终图像为640x480,则应创建此大小的视频、位图、位图数据,然后将视频添加到空的MovieClip/Sprite(容器)中并缩放容器以使其适合屏幕。我使用video.scaleX/Y在舞台上缩小它的大小,使位图/视频数据保持原始尺寸。我使用video.scaleX/Y在舞台上缩小它的大小,使位图/视频数据保持原始尺寸。
private var cam:Camera;
private var myVideo:Video;
private function attachCamera():void
{
cam = Camera.getCamera();
cam.setMode(8192,6144,30,true);
cam.setQuality(0,100);
myVideo = new Video(160,120);
//Flip preview on camera and result!
var flip:Matrix = new Matrix();
flip.scale(-1,1)
flip.translate(myVideo.width,0)
myVideo.transform.matrix = flip;
myVideo.attachCamera(cam);
videoDisplay.addChild(myVideo);
}
private function takePicture():void
{
var bd:BitmapData = new BitmapData(cam.width,cam.height);
//fill db with source bitmap!!!
cam.drawToBitmapData(bd)
//Then the bd contains the highest possible camera source!
// But videoDisplay show's small preview!
}