我正在尝试使用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))
但是徒劳无功。我在这里做错了吗?
答案 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 );
}