我使用fileReference.browse()從硬盤選擇圖像文件。Flex 4 fileReference選擇圖像文件dimmensions(寬度和高度)
如何檢查所選圖像文件的寬度和高度?
謝謝!
我使用fileReference.browse()從硬盤選擇圖像文件。Flex 4 fileReference選擇圖像文件dimmensions(寬度和高度)
如何檢查所選圖像文件的寬度和高度?
謝謝!
使用loadBytes()將fileReference.data加載到加載程序中。然後你將有:sourceBMP:Bitmap = loader.content作爲位圖;
這裏是一個示例代碼:
MXML部分:
<fx:Declarations>
<net:FileReference id="fileReference"
select="fileReference_select(event);"
complete="fileReference_complete(event);" />
</fx:Declarations>
<s:Button id="uplaodImageBtn"
label="Upload Image"
click="uplaodImageBtn_clickHandler()"/>
AS3部分:
private function uplaodImageBtn_clickHandler() : void {
var arr:Array = [];
arr.push(new FileFilter("Images", ".gif;*.jpeg;*.jpg;*.png"));
fileReference.browse(arr);
}
private function fileReference_select(evt:Event):void {
fileReference.load();
}
private function fileReference_complete(event:Event):void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete);
loader.loadBytes(fileReference.data);
}
public function loader_complete (event:Event) : void {
var sourceBMP:Bitmap = event.currentTarget.loader.content as Bitmap;
Alert.show(sourceBMP.width + ', ' +sourceBMP.height);
}
從Flex的上下文中,我非常肯定,你從瀏覽器返回結果,它只是一個byteArray。理論上,如果您使用該byteArray作爲圖像標籤的源代碼,那麼只要將該圖像添加到容器中,您就可以獲得高度和寬度。
否則,我不認爲有一種簡單的方法可以使用Flex從本地文件獲取這樣的元數據信息。
這是一個ByteArray,是的。我想過以編程方式創建一個Image對象,但擔心這樣做的開銷。 你是說即使我這樣做,我不得不使用addChild來測量它的內容的dimmensions?我不關心容器的大小,只是所選圖片的寬度和高度。 謝謝! – Francisc 2010-08-10 11:01:57
是的,可能會有開銷創建圖像對象。我相信,只有使用AddChild方法將圖像添加到父級後,圖像纔會被測量,因此高度和寬度將爲零,除非您明確設置。 – JeffryHouser 2010-08-10 12:48:49
你應該能夠如果閱讀image.sourceWidth和image.sourceHeight你等待圖像源屬性更新。這會給你未縮放的原始值。
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
private function browseImage(event:MouseEvent):void {
var arr:Array = [];
arr.push(new FileFilter("Images", ".gif;*.jpeg;*.jpg;*.png"));
imageFileReference.browse(arr);
}
private function imageSelect(evt:Event):void {
imageFileReference.load();
}
private function imageComplete(evt:Event):void {
image.source = smallImageFileReference.data;
image.addEventListener(FlexEvent.UPDATE_COMPLETE, getImageSize);
}
private function getImageSize(evt:FlexEvent):void {
image.removeEventListener(FlexEvent.UPDATE_COMPLETE, getImageSize);
imageWidth.text = image.sourceWidth + "px";
imageHeight.text = image.sourceHeight + "px";
}
]]>
</fx:Script>
<fx:Declarations>
<net:FileReference id="imageFileReference"
select="imageSelect(event)"
complete="imageComplete(event)"/>
</fx:Declarations>
<s:VGroup width="100%" height="100%">
<s:HGroup width="100%" verticalAlign="middle">
<s:Label fontWeight="bold" text="Width:" />
<mx:Text id="imageWidth" />
</s:HGroup>
<s:HGroup width="100%" verticalAlign="middle">
<s:Label fontWeight="bold" text="Height:" />
<mx:Text id="imageHeight" />
</s:HGroup>
<s:Image id="image" maxHeight="200" maxWidth="200" />
<s:Button label="Browse for Image" click="browseImage(event)" />
</s:VGroup>
謝謝Andi! 我不知道這種技術會爲應用程序增加多少開銷。 但優秀的答案。謝謝! – Francisc 2010-08-29 17:36:46
我看到您選擇了不同的解決方案,將圖像添加到顯示列表中。從8月10日你的評論中,我以爲你不想那麼做。 – andi 2011-10-19 13:40:40
確實。我沒有看到下面的MXML部分:'
'。在想'image'只是一個沒有添加到舞臺上的AS變量。 – Francisc 2011-10-20 10:55:36