【问题标题】:Loader.as returning blank bitmapLoader.as 返回空白位图
【发布时间】:2013-03-05 21:42:10
【问题描述】:

我有一个应用程序从服务器中提取 Bitmap 资源 - 目前我使用 Loader 类来执行此操作,然后,一旦加载它们,根据加载器尺寸生成 BitmapData 并将 Loader 的实例直接绘制到它(BitmapData 用于 Away3D 纹理以及 Bitmap 实例,因此我不需要加载器)。

这一直对我有用,但最近我开始得到 0x0 加载器,结果是无效的 BitmapData。

我不再这样做了:

this.imageBitmap = new BitmapData(this.imageLoader.width, this.imageLoader.height, true, 0);

..并开始这样做:

this.imageBitmap = new BitmapData(event.target.content.width, event.target.content.height, true, 0);

其中 event 是加载程序触发的 Event.COMPLETE 事件。这解决了尺寸问题,但 BitmapData 只是一个纯白色位图(默认情况下它设置为透明,所以它被绘制到其中)。令人沮丧的是,这种情况并非每次都发生,如果我刷新应用程序,它应该在大约 25% 的时间里正常工作,否则它会像这样播放。

我的截止日期很紧,我真的搞砸了,如果有人可以提供帮助或建议更好的方法,你真的会救我的命!

【问题讨论】:

  • 听起来像是与安全相关的问题,您是否从跨域获取位图?
  • 唉,不,我前段时间修复了跨域问题,但它目前还是沙盒(也没有错误,只是空白加载器)
  • 我会在event.target.content 上运行更多与反射相关的代码,例如检查它是什么类型以及它是什么LoaderInfo 实例。我见过当 Flash 不支持位图或将文件“错误”为阶段空白 SWF 时,它不会报告错误。
  • 我会检查,但即使有这样的错误我也看不到绕过它们的方法,而且这种方法以前一直有效。您知道其他将位图加载到 Flash 中的方法吗?

标签: actionscript-3 flash loader


【解决方案1】:

听起来您需要调整加载程序的图像解码策略 - 以确保它在 COMPLETE 触发之前解码图像 - 然后宽度和高度等应该是可靠的。

要做到这一点,只需在 Loader.load 方法中添加一个合适的 LoaderContext 对象即可:

var loaderContext:LoaderContext = new LoaderContext();
//set decode policy
loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD;
//load image
loader.load(yourUrl, loaderContext);

默认解码策略是 ImageDecodingPolicy.ON_DEMAND - 在实际需要之前不会解码图像。

语言文档:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/ImageDecodingPolicy.html

【讨论】:

  • 嘿,我从没听说过这个,所以看起来像答案,但遗憾的是没有快乐,同样的事情发生了!
【解决方案2】:

已修复,愚蠢的疏忽和有点晦涩的情况,但我会留下答案,以防有人遇到类似情况。

我的加载器包含在 Asset 类中 - 当另一个对象需要内部位图时,它会查询该类 - 如果位图存在,则返回它,如果不存在,则使用加载器加载它并为 COMPLETE 事件注册回调当 Loader 加载并将其内容传输到 BitmapData 实例时触发。

我犯的愚蠢错误是,如果多个对象正在查询同一个(尚未加载的)资产,它每次都会开始重新加载资产,并在这样做时创建一个新的加载器......所以当第一个 Loader 完成时,它会触发一个事件,但不存在对它的引用,这不仅会造成内存泄漏,还会导致 Asset 类从最近创建的 Loader 中提取 BitmapData,这并不完整! Loader 的异步特性是它有时工作的原因,因为有时最终的 Loader 会及时准备好进行 BitmapData 提取。

简单的解决方案是创建一个内部布尔值 _isLoading,在第一次调用 load() 时将其设置为 true - 如果为 true,则忽略任何后续调用,但仍注册回调,这是一种享受!

【讨论】:

    猜你喜欢
    • 2014-03-27
    • 2012-06-03
    • 1970-01-01
    • 2015-10-28
    • 2021-01-10
    • 2015-02-23
    • 1970-01-01
    • 2022-11-12
    • 2018-12-23
    相关资源
    最近更新 更多