bitmapdata.draw无声地失败

时间:2012-06-27 07:23:29

标签: actionscript-3 flash actionscript

我正在尝试使用Loader读取图像(变量名称是faceimage)并尝试将该图像的bitmapdata传递给名为detect的函数。但是,在我尝试获取位图的行中失败了。

    bmpTarget = new Bitmap( new BitmapData( faceImage.width, faceImage.height, false ) )
    bmpTarget.bitmapData.draw( faceImage ); // Fails, no errors shown
    detector.detect( bmpTarget.bitmapData );

我通过在失败的行的上方和下方放置跟踪语句来缩小到这一行。 faceImage包含我通过在屏幕上显示内容来验证的有效数据。我也试过

    bmpTarget = Bitmap(BitmapData(faceImage.content))

但是徒劳无功。我在这里做错了吗?

3 个答案:

答案 0 :(得分:1)

这可能是沙盒/跨域问题。某些跨域设置禁止将加载图像的内容绘制到bitmapData。您可以使用URLLoader加载原始图像数据,然后在loadBytes上使用Loader来解决此问题。

答案 1 :(得分:1)

如上所述: Why do Loader objects kill bitmapdata draw();?

您可能需要LoaderContext

loader.load("http://www.example.com/myimage.jpg", new LoaderContext(true));

否则,您可以从其他网站加载图片,但不能访问draw()所需的实际位图数据。

答案 2 :(得分:1)

我想知道你是否在加载之前尝试访问bitmapdata?

也许尝试使用完整的监听器......

var _urlRequest:URLRequest = new URLRequest("urlToImage");
var faceImage:Loader = new Loader;
faceImage.load(_urlRequest);
faceImage.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void{ trace(e) });
faceImage.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded, false, 0, true);

function imageLoaded(e:Event):void {

faceImage.contentLoaderInfo.removeEventListener(Event.COMPLETE, imageLoaded);
var bmpTarget:Bitmap = e.target.content;
detector.detect( bmpTarget.bitmapData );
}