Flex - 错误#2015:无效的BitmapData

时间:2013-05-03 11:28:27

标签: flex error-handling bitmapdata

我真的需要一些帮助,因为我不知道如何解决它! :/

这里有问题。

我的应用程序在我的计算机上工作正常,无论是离线还是在线(闪存上传到我们的网络服务器)。它在IE和Firefox中都可以正常工作。

然而,有些用户确实在IE中运行它有问题,而Firefox仍然没问题。

应用程序本身有效,尝试将某些帧缓冲到BitmapData时会出现错误。

所以,在Firefox中,它运行得很好。 在IE(在我的电脑上)它很棒。 在IE(在其他计算机上)它不起作用,并抛出此错误。它发生在最后,这意味着它一直正常,直到最后一次运行该函数。 (它是这样运行以允许更新进度条。如果我将for循环设置为180然后它全部冻结直到完成。这就是为什么我做10和10。)

任何有关这方面的帮助都会很棒,因为我完全被困在这里...... 我已经跟踪了bitmapdata的大小,并且在出现错误时它是1920x1080,这应该是它应该是的。


这是失败的代码:

fpsoSWFBuffer = new BitmapData(fpsoMC.width, fpsoMC.height, false, 0x00ff0000);

这是代码所在的整个函数:

public function bufferFpsoImages(evt:TimerEvent):void{
            for (var i:int = 0; i<10; i++){
                fpsoMC.gotoAndStop(currentFpsoFrame);
                fpsoSWFBuffer = new BitmapData(fpsoMC.width, fpsoMC.height, false, 0x00ff0000);
                fpsoSWFBuffer.draw(fpsoMC);
                fpsoImgArray[currentFpsoFrame] = fpsoSWFBuffer;

                currentFpsoFrame++;
            }

            if (currentFpsoFrame <= (totImg360-10)){
                //   Still buffering frames   //    

                myLoadingPanel.setBufferProg(currentFpsoFrame);
                var fpsoTimer:Timer = new Timer(1,1);
                fpsoTimer.addEventListener(TimerEvent.TIMER_COMPLETE, bufferFpsoImages);
                fpsoTimer.start();

            }else{
                //   All frames buffered   //   
                currentFpsoFrame = 0;
                fpsoLoaded = true;
                fpsoLoading = false;

                ncFPSO.removeElement(myLoadingPanel);
                myLoadingPanel = null;


                var fpsoBitmap:Bitmap = new Bitmap(fpsoImgArray[0]);
                fpsoBitmap.smoothing = true;
                fpsoImage.source = fpsoBitmap;

            }
        }

编辑: 我现在已经添加了一些调试功能,以便能够知道它失败的地方。 (因为它在调试期间工作,我需要在线调试实时版本。)

这就是我得到的:

ErrorID=2015
ErrorMessage=Error #2015
ErrorPos=fpsoSWFBuffer = new BitmapData(1920, 1080, false, 0x00ff0000);
CurrentFpsoFrame=168
Position in For Loop=8

EDIT2:这是我最终进入Flash Builder的错误消息。所以现在它也在这里崩溃.. = /

ArgumentError: Error #2015: Invalid BitmapData.
at flash.display::BitmapData/ctor()
at flash.display::BitmapData()
at Main/bufferTemplateImages()[E:\Workspace - Flash Builder\vCog Workspace\vCog Communicator 3.0\src\Main.mxml:461]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.utils::Timer/tick()

2 个答案:

答案 0 :(得分:1)

你的缓冲1.5gb的内存? Flash不断向操作系统请求内存,直到操作系统无法再提供内存为止。如果它在您的计算机上运行,​​而在其他计算机上运行,​​则可能是他们的计算机正在运行许多其他程序请求内存,并且无法为您的项目提供足够的内存。我要检查的另一件事是,他们使用32位窗口的操作系统版本只能看到最大2Gb的内存。虽然这只是一个理论。也许首先尝试压缩图像以限制内存使用。

答案 1 :(得分:1)

似乎IE对Flash有一些最大内存使用限制,而Firefox则没有。

我可能错了,但我通过重写代码处理较小的文件(较少的内存使用量)并在用户旋转视图后加载高分辨率图像来修复它。

我曾经缓冲过1,5GB的meory,现在我缓冲大约750MB并且它可以工作。

仍然很奇怪,IE有局限性,Firefox和Chrome没有......

哦,好吧.. = /