AS3 - размеры видео с веб-камеры не переносятся в новые BitmapData - по умолчанию 320x240 - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь сделать снимок с веб-камеры 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 ]

3 голосов
/ 07 сентября 2013

Некоторое время я боролся с почти идентичной проблемой.Растровое изображение имело желаемый размер, но сама фотография занимала только треть пространства в растровом изображении, оставляя много пустого пространства вокруг него.

Надеюсь, кто-то может предложить лучшее решение, но вот чтоЯ сделал, чтобы обойти это:

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);

, таким образом, делая пропускную способность не учитываемой и акцентируя внимание на качестве.

0 голосов
/ 28 января 2012

Попробуйте понизить количество фреймов в секунду вместо

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

try

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

Вам не нужно 60 кадров в секунду, если все, что вы делаете, делает снимок

Существует также вероятность того, что ваша веб-камера может не поддерживать 1920x1080.Возможно, попробуйте меньшие размеры, если смена FPS не помогает.

...