【发布时间】:2011-06-21 00:27:18
【问题描述】:
免责声明:我不是 Flash 开发人员 但我正在尝试解决闪存问题。 请不要以为我很亲密 熟悉 AS 或 Flash,因为我是 不是。
我目前的困境是我托管的资源是application/octet-stream。在我的 Actionscript 代码中,我使用了一些库(据我所知)执行 new Image 并将资源加载到创建的对象中。
有一个方法,loadImage(url),它接受一个 url,你可以在其中向它提供图像的路径。
我无权访问loadImage 源代码,所以我不知道它究竟做了什么,但是工作的那个可以很好地加载图像,因为Content-Type 是image/jpeg。不工作的一个(我正在尝试修复的这个)不是因为 Content-Type 不同。
我想知道是否有人可以告诉我是否可以让 flash 基本上解析 URI,就好像它是 image/jpeg,而不管 Content-Type 是什么?
我无权访问源 目前的代码,但我只是 把它扔在那里以获得输入
如果需要,我明天会尝试获取一些源代码
编辑:好的,我现在可以访问源代码了。这是加载图像的部分:
postcardImage = new Image();
postcardImage.loadImage(imagePath);
我假设 Image 构造函数是 flash/AS 的原生构造函数,但我无法通过 google 搜索 loadImage 方法,所以它必须是自定义的,对吧?
或者 Image 构造函数本身可以是自定义的吗?原始Image 的扩展版本,带有loadImage 方法等?
不管怎样,有谁知道如何查看loadImage的源代码?
编辑#2:我做了一个ack-grep 并找到了库中定义的loadImage 方法的源代码:
public class Image extends Sprite {
private var _source:String;
private var _loader:Loader;
private var _bmapData:BitmapData;
private var _loadedBytes:Number;
private var _totalBytes:Number;
public function Image() {
trace('IMAGE');
}
public function loadImage(s:String):void {
_source = s;
_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
_loader.contentLoaderInfo.addEventListener(Event.INIT, onLoading);
_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
_loader.load(new URLRequest(_source));
function onProgress(e:ProgressEvent):void {
_loadedBytes = e.target.bytesLoaded;
dispatchEvent(new ProgressEvent(ProgressEvent.PROGRESS));
if(!_totalBytes) {
setTotalBytes(e.target.bytesTotal);
}
}
function onLoading(e:Event):void {
_loader.contentLoaderInfo.removeEventListener(Event.INIT, onLoading);
}
function onLoaded(e:Event):void {
_bmapData = e.target.content.bitmapData;
addChild(e.target.content);
dispatchEvent(new Event(Event.COMPLETE));
_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoaded);
}
}
public function getBmapData():BitmapData {
return _bmapData;
}
public function duplicate():Image {
var dup:Image = new Image();
dup.addChild(new Bitmap(_bmapData.clone()));
return dup;
}
public function getLoadedBytes():Number {
return _loadedBytes;
}
private function setTotalBytes(n:Number):void {
_totalBytes = n;
dispatchEvent(new Event("TOTALBYTES_SET"));
}
public function getTotalBytes():Number {
return _totalBytes;
}
}
任何人都可以就我如何在这方面做loadBytes 提供建议吗?我正在考虑定义一个自定义方法,loadResource 或无论 Content-Type 如何都可以加载的东西......或者只是在当前 load 方法和内部创建一个可选参数,根据传递的内容进行分支。
【问题讨论】:
标签: flash actionscript-3