Flash AS3 - 在舞台上创建的第二个视频与第一个视频大小相同

时间:2009-09-02 00:42:02

标签: flash actionscript-3 video size

即使我为每个人指定了不同的宽度和高度。

vid = new Video(600, 800);
this.addChild(vid);
trace(vid.width); //600
trace(vid.height); //800

vid2 = new Video(1000, 1200);
this.addChild(vid2);
trace(vid2.width); //600
trace(vid2.height); //800

这里发生了什么?这是一个flash bug吗?

3 个答案:

答案 0 :(得分:1)

这是一个错误。解决方法很简单 - 您只需在调用构造函数后手动设置宽度和高度。我这样做是通过创建自己的Video类继承自flash.media中的类,如下所示:

package com.ganzogo.media {

  import flash.media.Video;

  public class Video extends flash.media.Video {

    public function Video(width:int=320, height:int=240) {

      super(width, height);
      this.width = width;
      this.height = height;

    }
  }
}

然后只需导入此类,您的代码就可以运行了。请注意,我正在设置尺寸的默认值;这是为了匹配父类中的默认值。

答案 1 :(得分:1)

这个问题可能会解决显示问题,但我们在这里遇到了另一个灾难问题。当您使用BitmapData“绘制”视频内容时,我们再次遇到此问题,无论您尝试做什么,您从视频中快照的图像都是您为该FlashPlayer实例创建的第一个视频组件的大小。

无论你做什么都不会解决它。所以解决方法如下:

  1. 为您创建的第一个视频对象提供最大尺寸(以像素为单位)。例如:

    var videoDisplay:Videonew Video(1280, 720);
    
  2. 要对视频显示进行快照,您需要使用Matrix类,例如:

      var extractImage:BitmapData = new BitmapData(videoDisplay.videoWidth, videoDisplay.videoHeight);
      var videoMatrix:Matrix = new Matrix();
      videoMatrix.scale(Number(videoDisplay.videoWidth) / 1280.0, Number(videoDisplay.videoHeight) / 720.0);
      extractImage.draw(videoDisplay, videoMatrix, null,null,null, true);
    
  3. 现在,当您使用此位图作为图像时,您将获得想要的正确图像。 如果您使用较大的视频分辨率,请增加该视频大小。

答案 2 :(得分:0)

我刚刚在Mac上的Flash CS4中尝试过您的示例代码,但我没有看到这个问题(我必须在变量名称之前添加var)。您使用的是什么版本和平台?这可能是一个错误。