AS3 - 网络摄像头视频尺寸没有延续到新的BitmapData - 默认为320x240

时间:2012-01-27 18:12:40

标签: flash actionscript-3 video webcam bitmapdata

我正在尝试捕获1920x1080网络摄像头捕获并使用捕获创建新的位图。我觉得我的所有维度设置都是正确的,但最终的1920x1080位图只包含一个小型的320x240版本的视频捕获。救命啊!

import flash.display.Bitmap;
import flash.display.BitmapData;

var bandwidth:int = 1000; // Maximum amount of bandwidth that the current outgoing video feed can use, in bytes per second.
var quality:int = 100; // This value is 0-100 with 1 being the lowest quality. 

var cam:Camera = Camera.getCamera();
cam.setQuality(bandwidth, quality);
cam.setMode(1920,1080,60,true); // setMode(videoWidth, videoHeight, video fps, favor area)
var video:Video = new Video();
video.attachCamera(cam);
video.x = 0;
video.y = -100;
video.width = 1920;
video.height = 1080;
addChild(video);

var bitmapData:BitmapData = new BitmapData(video.width, video.height);

var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.x = 0;
bitmap.y = 0;
bitmap.width = 1920;
bitmap.height = 1080;
addChild(bitmap);
bitmap.visible = false;

capture_mc.buttonMode = true;
capture_mc.addEventListener(MouseEvent.CLICK,captureImage);

function captureImage(e:MouseEvent):void {
    bitmapData.draw(video);
    bitmap.visible = true;
}

2 个答案:

答案 0 :(得分:3)

我在一段时间内遇到了几乎完全相同的问题。位图图像是所需的大小,但是照片本身只占据了位图图像中三分之一的空间 - 在它周围留下了大量的空白区域。

希望有人能提出更好的解决方案,但这就是我为解决这个问题所做的工作:

var trans:Matrix = new Matrix();
trans.scale(3, 3); 
bitmapData.draw(v, trans );

我建议你的例子,将比例从3改为1920/320。

另一个提示:设置相机模式后,尝试跟踪相机的高度和宽度。这将告诉您实际捕获了多少像素。例如,在我的项目中,我尝试设置以下设置:

c.setMode(2048, 1536, 5, true);
trace (c.width, c.height, "cam res");

(其中c =相机) 输出是“960 720 cam res” - 表明这是我的相机可以处理的最大分辨率,而不是所需的2048乘1536

结果图片没有像素化,但它不如原生软件捕获的图片那么好。不确定这是因为我的方法还是我用来压缩位图数据的JPGEnocoder。

另外(我可能错了) - 但可能值得尝试:

c.setQuality(0,100);

因此不考虑带宽,并强调质量。

答案 1 :(得分:0)

尝试每秒降低帧数,而不是

cam.setMode(1920,1080,60,true); //60 FPS

cam.setMode(1920,1080,10,true); //10 FPS

如果您正在拍摄快照,则不需要60 fps

您的网络摄像头可能也不支持1920x1080。如果改变FPS没有帮助,也许尝试更小的尺寸。