2

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

    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))

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

4

3 回答 3

1

如前所述: 为什么 Loader 对象会杀死 bitmapdata draw();?

您可能需要一个LoaderContext.

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

否则,您可以从其他站点加载图像,但不能访问实际的 bitmapData,这是必需的draw()

于 2012-06-27T07:32:07.760 回答
1

我想知道您是否尝试在加载位图数据之前访问它?

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

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 );
}
于 2012-06-27T14:42:58.457 回答
1

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

于 2012-06-27T07:27:45.530 回答