AS3 - Размеры видео с веб-камеры не переносятся в новые BitmapData - по умолчанию 320x240
Я пытаюсь сделать снимок с веб-камеры 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 ответа
Некоторое время я боролся с почти идентичной проблемой. Растровое изображение имело желаемый размер, но сама фотография занимала только треть пространства в растровом изображении, оставляя много пустого пространства вокруг него.
Надеюсь, кто-то может предложить лучшее решение, но вот что я сделал, чтобы обойти это:
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 разрешений камеры" - это предполагало, что это было максимальное разрешение, которое могла обрабатывать моя камера, а не желаемое 2048 на 1536
Результирующее изображение не было пикселированным, но оно было не таким хорошим, как изображения, снятые родным программным обеспечением. Не уверен, что это из-за моего метода или JPGEnocoder, который я использовал для сжатия растровых данных.
Также (и я могу ошибаться по этому поводу) - но, возможно, стоит попробовать:
c.setQuality(0,100);
таким образом, пропускная способность не учитывается, а акцент делается на качестве.
Попробуйте понизить число фреймов в секунду вместо
cam.setMode(1920,1080,60,true); //60 FPS
пытаться
cam.setMode(1920,1080,10,true); //10 FPS
Вам не нужно 60 кадров в секунду, если все, что вы делаете, это снимок
Существует также вероятность того, что ваша веб-камера может не поддерживать 1920x1080. Возможно, попробуйте меньшие размеры, если смена FPS не помогает.