ActionScript3 - 在位移数据的BitmapData上绘制视频(网络摄像头)输出

时间:2015-11-23 09:58:08

标签: actionscript-3 bitmapdata

我正在尝试在Bitmapdata上绘制视频(网络摄像头)输出,如果视频位置为(0,0),但是当我将视频移动到(200,0)时,它可以工作也转移了。

代码非常简单

// omitted for brevity

var videoContainer:Sprite = new Sprite();

// Video is added
videoContainer.addChild(video)

// position is offsetted
videoContainer.x = 200;
videoContainer.y = 200;
this.addChild(videoContainer)

// Generate Bitmap
var bd:BitmapData = new BitmapData(video.width, video.height, false, 0x0);
bd.x = video.x;
bd.y = video.y + video.height;
this.addChild(bd);

this.addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event):void {
    // start drawing
    bd.lock()
    bd.draw(video);
    bd.unlock();
}

enter image description here

我试图用矩阵重新定位它,但显然整个原始来源已经改变了。

即使videoContainer偏离(0,0),有没有办法确保输出保持在(0,0)?

1 个答案:

答案 0 :(得分:1)

首先,看起来你的代码中有一个类型:

var bd:Bitmap = new BitmapData(video.width, video.height, false, 0x0);

它应该抛出错误,因为无法将 BitmapData 的实例分配给类型为位图的变量。但是,我想,这只是一种类型。

其次,看起来您的位图已移位,因为您将其移位=)

bd.x = video.x;

我建议删除/评论此代码。

UPD:

另外,您是否可以尝试使用应用转换更改获取 DisplayObject BitmapData 实例的下一种方法:

function getBitmapDataFromDisplayObject(
    displayObject:DisplayObject,
    transparent:Boolean = true,
    fillColor:uint = 0x00000000,
    smoothing:Boolean = true,
    customRect:Rectangle = null):BitmapData
{
    var bitmapData:BitmapData;
    try
    {
        var tempRect:Rectangle = displayObject.getRect(displayObject);
        if (customRect)
        {
            tempRect = customRect;
        }

        var matrix:Matrix = new Matrix();
        matrix.tx = -tempRect.x;
        matrix.ty = -tempRect.y;

        //bitmapData = new BitmapData(tempRect.right, tempRect.bottom, transparent, fillColor);
        bitmapData = new BitmapData(tempRect.width, tempRect.height, transparent, fillColor);
        bitmapData.draw(displayObject, matrix, null, null, null, smoothing);

    }catch (error:Error)
    {
        bitmapData = null;
    }

    return bitmapData
}
相关问题