1

まとめようとしているフラッシュフォトブース(Webカメラ)アプリケーションがありますが、縮小されたビデオウィンドウから640x480の画像を保存しようとすると問題が発生するようです。ビデオはうまく縮小されているようですが、ビットマップに描画すると写真がさらに縮小されるため、2.0のマトリックススケールを作成してサイズを640x480に戻す必要があり、そうすることで問題が発生するかどうかはわかりません。画像の品質。サイズ変更ハック(特にアップスケーリング)は使用したくありません。

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

基本的に、ビデオストリーム(640x480)とキャプチャされた写真(640x480)を表示する約256x192の2つの小さなボックスが必要です。保存すると、実際には640x480の画像が保存されます。

4

3 に答える 3

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

これにより、マトリックスを使用する必要がなくなります。デフォルトのビデオは320x240です。

于 2012-05-22T16:23:05.187 に答える
2
  • まず、256x192のビデオを作成します
  • 次に、bitmapData640x480を作成します
  • 次に、このビットマップデータ(実際にはビットマップ)を256x192に縮小します
  • 次に、小さなビデオを大きなビットマップ(データ)に描画しようとします-アップスケールする必要があるのも不思議ではありません

同じサイズでBitmapData、Bitmap、Videoを作成すれば、すべて問題ないはずです。

最終的な画像を640x480にする場合は、このサイズのビデオ、ビットマップ、ビットマップデータを作成してから、空のMovieClip / Sprite(コンテナー)にビデオを追加し、コンテナーを拡大縮小して画面に合わせます。

于 2012-05-22T16:32:12.220 に答える
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!


    }   
于 2014-05-18T16:50:48.400 に答える