var I:Image=new Image();
I.source='C:\\Abc.png';
var H:int=I.height;
H总是零!
我认为这是因为图像尚未完成从磁盘读取png文件。
我可以监控哪些事件可以知道宽度和高度何时具有正确的值?
“完成”事件似乎仅适用于下载图像。 'Render'事件发生在每个框架上。 (未记录的?)'sourceChanged',一旦源更改就会发生,并且会出现同样的问题!
当图像的宽度和高度属性具有有效值时,我会观察哪些事件会让我知道?或者是否有一些I.source ='xxx.png'的同步版本,我不知道?
P.S。是的,我知道我不应该在航空计划中使用“C:\”。这只是为了说明的目的,所以你不建议我使用“完整”,当源指示的文件是本地文件时,它似乎从未触发过。
答案 0 :(得分:0)
首先,sourceChanged是用于绑定的事件。每个Bindable酒店都有类似的财产。
完成应该在加载本地文件时触发 - 无论如何根据文档。我希望它能够在本地文件上快速启动,但是,我希望在加载文件和将内容添加到父文件,定位和调整大小之间存在延迟。这种延迟是高度和宽度无法立即获得的原因。
我可以看到一些不同的方法。首先,您需要查看Flex组件LifeCycle并覆盖updateDisplayList(),以便在项目(我怀疑是contentHolder)的大小时通知您。
第二种可能是覆盖contentHeight或contentWidth,以便它们为高度和宽度调度所述Bindable事件。
第三,是覆盖doScaleContent方法;这似乎是contentHolder的高度和宽度设置的位置。
接受你的选择。我不确定你的用例是什么;所以不能详细说明。
答案 1 :(得分:0)
var I:Image=new Image();
I.addEventListener(Event.COMPLETE, imageIsLoaded);
I.source='C:\\Abc.png';
function imageIsLoaded(event:Event):void
{
// ...
}
答案 2 :(得分:0)
获胜者是......“调整大小”。一旦图像大小发生变化(从0,0开始),就会触发resize事件。只要调整大小,就会有宽度和高度准确。
答案 3 :(得分:0)
尝试使用以下代码
protected function init():void
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, displayImage);
loader.load(new URLRequest('http://timeister.com/image.png'));
return;
}
protected function displayImage(event:Event):void
{
var loader:Loader = (event.target as LoaderInfo).loader;
myImage.data = loader.content;
myImage.width = loader.width;
myImage.height = loader.height;
this.height = myImage.height;
this.width = myImage.width;
this.visible = true;
return;
}