2012-05-22 44 views
1

我有一個閃光照相亭(網絡攝像頭)應用程序,我試圖包裝,但似乎有試圖從縮小的視頻窗口保存640x480圖像的問題。該視頻似乎可以縮小,但是當我將其繪製到位圖時,它正在縮小照片,因此我必須創建2.0的矩陣縮放比例以將其重新調整爲640x480,並且我不確定這樣做是否會傷害到圖像的質量。我不想使用任何調整大小黑客(特別是升級)。從AS3縮放視頻保存原始位圖數據

我是新來的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"); 
} 

基本上我只是想兩個小盒子的約256×192顯示視頻流(640×480)和捕獲的照片(640×480),當我保存它實際上保存640x480圖像。

回答

2
  • 首先創建一個視頻256×192
  • 然後創建一個BitmapData 640×480
  • 則收縮對此BitmapData(當然,實際上是位圖),以256×192
  • 然後嘗試畫一個小視頻成一個大的位圖(數據) - 難怪你必須高檔

創建一個大小相同的位圖數據,位圖和視頻,一切都應該沒問題。

如果您希望最終圖像爲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! 


    }