我正在尝试在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();
}
我试图用矩阵重新定位它,但显然整个原始来源已经改变了。
即使videoContainer偏离(0,0),有没有办法确保输出保持在(0,0)?
答案 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
}