我正在尝试捕获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;
}
答案 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没有帮助,也许尝试更小的尺寸。