2012-05-22 11 views
1

줄 감싸는 중이지만 축소 된 비디오 창에서 640x480 이미지를 저장하는 데 문제가있는 것처럼 보이는 플래시 사진 부스 (웹 캠) 응용 프로그램이 있습니다. 비디오는 잘 내려 가고있는 것처럼 보입니다.하지만 비트 맵에 그리면 사진이 더 축소되어서 크기를 2.0으로 늘려서 크기를 640x480으로 다시 만들어야합니다. 그렇다면 그렇게하는 것이 확실하지 않습니다. 이미지의 품질. 나는 어떤 크기 조절 해킹 (특히 ​​up-scaling)을 사용하고 싶지 않다.AS3의 비디 오 비디오에서 원래의 bitmapData를 저장하십시오.

나는 AS3을 처음 사용하므로 용서하세요. 여기

import flash.display.Bitmap; 
import flash.display.BitmapData; 
import com.adobe.images.JPGEncoder; 

var cam:Camera = Camera.getCamera(); 
cam.setQuality(0, 100); 
cam.setMode(640,480,30,true); // setMode(videoWidth, videoHeight, video fps, favor area) 
var video:Video = new Video(); 
video.attachCamera(cam); 
video.x = 382; 
video.y = 225; 
video.width = 256; 
video.height = 192; 
addChild(video); 

var bitmapData:BitmapData = new BitmapData(640,480); 

var bitmap:Bitmap = new Bitmap(bitmapData); 
bitmap.x = 648; 
bitmap.y = 225; 
bitmap.width = 256; 
bitmap.height = 192; 
addChildAt(bitmap, 18); 

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

function captureImage(e:MouseEvent):void { 
var scale:Number=2.0; 
var matrix:Matrix = new Matrix(); 
matrix.scale(scale, scale); 
bitmapData.draw(video, matrix, null, null, null, true); 

var jpgEncoder:JPGEncoder=new JPGEncoder(100); 
var byteArray:ByteArray=jpgEncoder.encode(bitmapData); 

var fileReference:FileReference=new FileReference(); 
fileReference.save(byteArray, ".jpg"); 
} 

는 기본적으로 난 그냥 싶어 ... 더러운 부분이 작은 상자의 약 256x192 실제로 저장할 때 비디오 스트림 (640 × 480) 및 캡처 사진 (640 × 480)를 표시하고 640x480 이미지를 저장합니다.

답변

2
  • 먼저 당신이 BitmapData 생성 한 후 비디오 256x192
  • 을 만들 수 640 × 480
  • 당신은 (물론, 비트 맵 실제로) 256x192
  • 에이 다음에 작은 비디오를 그릴려고이의 BitmapData 축소 큰 비트 맵 (데이터) - 고화질을 가져야하는 것은 당연한 일입니다.

같은 크기로 BitmapData, Bitmap 및 Video를 만들고 모두 OK 여야합니다.

최종 이미지를 640x480으로 만들려면 비디오, 비트 맵, 비트 맵 데이터를이 크기로 만든 다음 비어있는 MovieClip/Sprite (컨테이너)와 축척 컨테이너에 비디오를 추가하여 화면에 맞춰야합니다.

+0

video.scaleX/Y를 사용하여 비트 맵/비디오 데이터를 원본 크기로 유지하면서 스테이지 크기를 줄였습니다. – bfritz

4
var video:Video = new Video(640, 480); 

이렇게하면 매트릭스를 사용하지 않아야합니다. 기본적으로 동영상은 320x240입니다.

0
private var cam:Camera; 
private var myVideo:Video; 

    private function attachCamera():void 
    { 

     cam = Camera.getCamera(); 
     cam.setMode(8192,6144,30,true); 
     cam.setQuality(0,100); 


     myVideo = new Video(160,120); 


     //Flip preview on camera and result! 
     var flip:Matrix = new Matrix(); 
     flip.scale(-1,1) 
     flip.translate(myVideo.width,0) 


     myVideo.transform.matrix = flip; 

     myVideo.attachCamera(cam); 

     videoDisplay.addChild(myVideo); 

    } 

    private function takePicture():void 
    { 

     var bd:BitmapData = new BitmapData(cam.width,cam.height); 
      //fill db with source bitmap!!! 
      cam.drawToBitmapData(bd) 

     //Then the bd contains the highest possible camera source! 
     // But videoDisplay show's small preview! 


    }