【问题标题】:Save original bitmapData from scaled video in AS3从 AS3 中的缩放视频中保存原始 bitmapData
【发布时间】:2012-05-22 13:57:37
【问题描述】:

我有一个闪光照相亭(网络摄像头)应用程序,我正在尝试结束它,但在尝试从缩小的视频窗口保存 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");
}

基本上我只想要两个大约 256x192 的小盒子,显示视频流 (640x480) 和捕获的照片 (640x480),当我保存它时,实际上保存的是 640x480 图像。

【问题讨论】:

    标签: actionscript-3 flash webcam scaling bitmapdata


    【解决方案1】:
    var video:Video = new Video(640, 480);
    

    这应该可以避免使用矩阵。视频默认为 320x240。

    【讨论】:

      【解决方案2】:
      • 首先创建一个 256x192 的视频
      • 然后你创建一个 bitmapData 640x480
      • 然后将此位图数据(实际上是位图)缩小到 256x192
      • 然后您尝试将小视频绘制成大位图(数据) - 难怪您必须升级

      创建一个大小相同的BitmapData、Bitmap和Video,一切都应该没问题。

      如果您希望最终图像为 640x480,则应创建此尺寸的视频、位图、位图数据,然后将视频添加到空的 MovieClip/Sprite(容器)并缩放容器以使其适合屏幕。

      【讨论】:

      • 我最后使用 video.scaleX/Y 在舞台上缩小它的大小,使位图/视频数据保持原始尺寸。
      【解决方案3】:
      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!
      
      
          }   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        • 2012-08-03
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多