gpt4 book ai didi

actionscript-3 - 如何将 BitmapData 保存到 Bitmap *.bmp 文件,或者更快的 JPE 编码方法

转载 作者:行者123 更新时间:2023-12-04 05:51:20 24 4
gpt4 key购买 nike

我有一个使用 Zinc 4.0 封装在 *.exe 中的基于 Flash/Actionscript 3 的桌面应用程序。我正在使用 Flash Pro CS5。

我需要开始在本地保存非常大的图像文件。在通过 Zinc 将它们保存到本地文件之前,我已经对这些图像进行了 JPG 编码。我使用 This "asyncronous like" method 解决了 actioncirpt 超时问题.编码 1.5 MP 图像大约需要 5 秒,这还可以,但编码 8 MP 图像文件大约需要 40 秒,这是 Not Acceptable 。

我的一个想法是将 BitmapData 本地保存到一个临时 Bitmap 文件 (*.bmp),而无需最终用户等待 Flash 中的 JPG 编码,然后使用我现有的图像处理器(用 C# 编写)来读取位图文件并对其进行编码,而无需等待 Flash 执行此操作,从而有效地将任务从用户手中转移出去。

我用过BitmapData.getPixels()尝试将字节数组直接写入文件,使用与我成功使用编码 JPG 相同的 Zinc 方法,但 *.bmp 文件不可读。除了 BitmapData getPixel() 的字节数组之外,是否还需要包含一些文件头才能成功保存位图图像?如果是这样,我怎么能在写入文件之前成功地将它们添加到字节数组中?

非常感谢任何指导、澄清或其他解决方案。

最佳答案

我找到了满足我需求的解决方案,以防其他人有类似需求:

要保存实际的位图 (*.bmp) 文件,工程师建议 Btimap encoder class太棒了。实际编码速度非常快;然而,由于我在 Zinc 中的文件写入调用是同步的,并且位图文件比 JPG 大得多,它实际上只是将我的瓶颈从编码转移到了文件保存,所以我决定寻找其他地方。如果 Zinc 有一个不会锁定 GUI 的异步二进制文件写入方法,我会很高兴,但在那之前,这不是我的解决方案。

我偶然发现了 Flash Alchemy 解决方案,效果很好。无需等待大约 40 秒来编码 8 MP 图像,现在只需几秒钟。这就是我所做的:

  • this page 下载 jpegencoder.swc并保存在我的项目目录
  • 添加了 swc:发布设置 > Flash(选项卡)> 脚本:Actionscript 3.0“设置...”按钮 > 库路径(选项卡)> 并添加了链接类型 =“合并到代码”
  • 的 .swc
  • 然后使用它:

  • (以下是我修改后的代码,仅包含基础知识)
    import flash.utils.ByteArray;
    import flash.display.BitmapData;
    import cmodule.aircall.CLibInit; //Important: This namespace changed from previous versions

    var byteArrayResults:ByteArray; //Holds the encoded byte array results

    public static function startEncoding(bitmapData:BitmapData):void {

    var jpeginit:CLibInit = new CLibInit(); // get library
    var jpeglib:Object = jpeginit.init(); // initialize library exported class to an object

    var imageBA:ByteArray = bitmapData.getPixels(bitmapData.rect); //Getpixels of bitmapData
    byteArrayResults = new ByteArray();
    imageBA.position = 0;
    jpeglib.encodeAsync(encodeComplete, imageBA, byteArrayResults, bitmapData.width, bitmapData.height, 80);
    }

    private static function encodeComplete(thing:*):void
    {
    // Do stuff with byteArrayResults
    }

    您可能会发现此链接也很有用:
    http://last.instinct.se/graphics-and-effects/using-the-fast-asynchronous-alchemy-jpeg-encoder-in-flash/640

    关于actionscript-3 - 如何将 BitmapData 保存到 Bitmap *.bmp 文件,或者更快的 JPE 编码方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999734/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com