当我尝试加载尺寸为 16000 X 16000 的图像时,使用带有 flash builder 4.7 的操作脚本 3,无法上传
Posted
技术标签:
【中文标题】当我尝试加载尺寸为 16000 X 16000 的图像时,使用带有 flash builder 4.7 的操作脚本 3,无法上传【英文标题】:Using action script 3 with flash builder 4.7 when i try to load image of dimension 16000 X 16000, not able to upload 【发布时间】:2016-05-05 17:17:49 【问题描述】:我在动作脚本 3 中发现了以下问题。
当我尝试使用以下代码加载尺寸为 16000 X 16000 的图像时,将动作脚本 3 与 flash builder 4.7 一起使用,它将使我的应用程序崩溃并且无法显示图像。
图片大小为 4.6 MB,图片尺寸为 16000 X 16000(宽 X 高)
当我尝试使用尺寸为 10000 X 3000(宽 X 高)的其他图像时,它会起作用
var mapLoader:Loader=new Loader();
var loaderInfo:LoaderInfo=mapLoader.contentLoaderInfo;
loaderInfo.addEventListener(Event.COMPLETE, function(event:Event):void
var image:Image=new Image();
image.source=mapLoader.content;
image.width=image.source.width * 0.6;
image.height=image.source.height * 0.6;
image.smooth=true;
);
loaderInfo.addEventListener(IOErrorEvent.IO_ERROR,function(e:IOErrorEvent):void
//some code
);
mapLoader.load(new URLRequest(mapSrc));
请帮助我并提前感谢
【问题讨论】:
16000 * 16000 * 4 等于 1GB 内存....崩溃并不奇怪...如果您正在实现滚动地图,您应该通过基于图块的系统来实现。 @SushiHangover,感谢您的帮助,我也在使用 astar 算法对这种大尺寸图像进行路径遍历,它是否适用于基于图块的系统?您能否提供一些链接,例如如何应用基于瓷砖的系统? 没有多少技术在尝试加载时不会崩溃。你怎么不知道这是一个非常巨大的图像?这是显而易见的问题。 【参考方案1】:在 Flash Player 11 之前,任何加载的图像的大小都有限制。自 Flash Player 11 起,此限制已被删除,最大大小取决于操作系统。
考虑到 Flash 在内部将图像处理为位图,您的 16000x16000 像素图像本身需要大约 1Gb 的 RAM。这可能超出了您的应用所允许的范围(甚至是您的系统的能力范围)。
由于您似乎正在制作一个应用程序,我建议您使用平铺系统:将完整的地图切割成更小的图像,然后并排放置。使用此系统,您的应用程序可以仅加载和显示所需的图块,从而大大减少所需的内存以及必要的带宽。如果您不想在瓦片加载时显示空白,您可以在瓦片下添加全图的低分辨率图像,以便用户在应用完成加载相应瓦片之前看到此部分的模糊版本并显示高分辨率版本。
【讨论】:
@Aralicia,感谢您的帮助,我也在使用 astar 算法对这种大尺寸图像进行路径遍历,它是否适用于桌面应用程序的基于瓷砖的系统?您能否提供一些链接,例如如何将基于 tile 的系统应用于桌面应用程序? 如果您在图像上使用寻路算法,您可能需要事先对其进行简化。例如,您是否 A* 遍历每个像素的地图像素?如果没有,也许低分辨率图像就足够了。或者,您可以拥有一个简化的“伪地图”文件,它不是图像,可以被视为一个值数组。您的应用的具体上下文是什么?以上是关于当我尝试加载尺寸为 16000 X 16000 的图像时,使用带有 flash builder 4.7 的操作脚本 3,无法上传的主要内容,如果未能解决你的问题,请参考以下文章
sonarqube 6.3 错误无法完成符号执行达到 16000 步的限制
JumpServer开源堡垒机项目GitHub Star数量超过16000!
错误消息“AFCCreateReSampler: avAFCInfo->bUsed[0] in SampleRate[44100] outSampleRate[16000]...”是啥意思?