我希望能够通过在ByteArrays之间来回转换来将图像移入和移出Flex。我一直遇到一些麻烦,所以我设计了一个简单的测试程序,甚至我无法开始工作。这是我现在正在尝试的代码:
protected function button3_clickHandler(event:MouseEvent):void
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler2);
loader.load(new URLRequest("file:///c:/win.jpg"));
}
private function loaderCompleteHandler2(event:Event):void
{
var loader:Loader = (event.target as LoaderInfo).loader;
var bmp:Bitmap = Bitmap(loader.content);
image1.source = bmp;
myBmpData = bmp.bitmapData;
myByteArray = bmp.bitmapData.getPixels(myBmpData.rect);
}
protected function button4_clickHandler(event:MouseEvent):void
{
var loader:Loader = new Loader();
loader.loadBytes(myByteArray);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderCompleteHandler);
}
private function loaderCompleteHandler(event:Event):void
{
var loader:Loader = (event.target as LoaderInfo).loader;
var bmp:Bitmap = Bitmap(loader.content);
image1.source = bmp;
}
到目前为止,这个过程从上到下:点击按钮3,图像显示,一切进展顺利。单击按钮4,我得到“错误#2044:未处理的IOErrorEvent:。text =错误#2124:加载的文件是未知类型。”在行“loader.loadBytes(myByeArray);”之后在函数button4_clickHandler中。据我所知,我正在按照预期使用一切。我真的很感激任何建议让我朝着正确的方向前进。谢谢!
答案 0 :(得分:1)
查看以下代码:
var l:URLLoader = new URLLoader(new URLRequest("/path/to/image"));
l.dataFormat = URLLoaderDataFormat.BINARY;
l.addEventListener(Event.COMPLETE, loaded);
private function loaded(event:Event):void
{
var ba:ByteArray = event.currentTarget.data as ByteArray;
b64Img.source = Base64.encode(ba);
}
我设置 source 属性的 b64Img 对象是Base64Image,它是伟大的FlexLib项目的一部分。所以,实际上,你正在做的是:
干杯
答案 1 :(得分:0)
上面的Danny Kopping解决方案应该可行,而URLLoader应该比Loader.load()表现得更好。
然而,使用Base64Image是恕我直言不是最佳的。在内部,Base64Image使用Loader.loadBytes&预先解码Base64 - 如此有效,对Base64进行编码,然后进行解码。
我建议只使用Loader的loadBytes方法:
private function loaded(event:Event):void
{
var loader:Loader = new Loader();
loader.loadBytes(event.currentTarget.data as ByteArray);
}
我不知道一种可以避免完全使用Loader的方法。