2012-01-27 2 views
0

1920x1080 웹캠 캡처를 캡처하고 캡처 된 새 비트 맵을 만들려고합니다. 모든 치수 설정이 정확하지만, 최종 1920x1080 비트 맵에는 비디오 캡처의 작은 320x240 버전 만 포함되어 있습니다. 도움!AS3 - 새로운 BitmapData로 이어지지 않는 웹캠 비디오 크기 - 기본값은 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

비디오는 화면의 어떤 크기입니까? 디버거에서 BitmapData 인스턴스의 크기를 추적/검사 해 보았습니까? "320x240 버전"이라면 전체 비트 맵 320x240입니까, 아니면 1600x840 더 비어있는 (기본적으로 흰색) 픽셀입니까? – ericsoco

답변

0

당신이하고있는 모든 스냅 샷

을 복용하는 경우 당신은 60 FPS 필요하지 않습니다

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

을 시도하는 대신

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

의, 초 당 프레임을 낮추는 시도

웹캠이 1920x1080을 지원하지 않을 수도 있습니다. 변화하는 FPS가 도움이되지 않는다면 더 작은 크기를 사용해보십시오.

3

한동안 거의 동일한 문제로 고민했습니다. 비트 맵 이미지는 원하는 크기 였지만 사진 자체는 비트 맵 이미지 내의 공간의 1/3 만 차지하여 주변에 많은 공백이 남았습니다.

희망 누군가가 더 나은 솔루션을 제안하지만, 여기에 내가 그것을 해결하기 위해 무슨 짓을했는지 수 있습니다

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

나는 당신의 예를 들어 제안, 3에서 320분의 1,920에 스케일을 변경합니다.

팁 : 카메라 모드를 설정 한 후 카메라의 높이와 너비를 추적 해보십시오. 얼마나 많은 픽셀이 실제로 캡처되는지 알려줍니다. 예를 들어, 내 프로젝트에서 나는 다음과 같은 설정을 설정 시도 :

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

(여기서 c = 카메라) 출력했다 "(960) 720 캠 입술"-이 내 카메라가 처리 할 수있는 최대 해상도 것을 제안, 원하는 것보다 오히려 2048 x 1536

결과 그림은 픽셀 화되지 않았지만 원시 소프트웨어에서 캡처 한 그림만큼 좋지 않았습니다. 비트 맵 데이터를 압축하는 데 사용한 JPGEnocoder 또는 내 메서드 때문인지 확실하지 않습니다.

또한 (그리고 나는 이것에 대해 잘못 될 수도 있습니다) - 그러나 그것은 시도 가치가있을 수도 있습니다 :

c.setQuality(0,100); 

따라서 대역폭이 아니라 배려를 결정, 품질에 중점을두고.