2

在 AIR 3.5 中运行以下代码时,我收到一个运行时错误,即 JPEGEncoderOptions 是一个未定义的变量:

rawBitmapData.encode(rawBitmapData.rect, new JPEGEncoderOptions(), rawByteArray);
4

6 回答 6

5

确保您的 sdk 中的以下文件在文件夹 \yoursdk\frameworks\ 中是最新的

air-config.xml flex-config.xml airmobile-config.xml

更新这个:

<target-player>11.5</target-player>
<swf-version>18</swf-version>

这可确保您的运行时是最新的 请参阅:将 Adob​​e Air 3.3 SDK 与 Flash Builder 一起使用

于 2012-12-13T11:00:02.400 回答
1

您可能缺少flash.display.JPEGEncoderOptions包的导入,或者您可能完全内联包质量,如下所示。

Adobe Flash Platform 压缩位图数据的示例:

// Compress a BitmapData object as a JPEG file. 
var bitmapData:BitmapData = new BitmapData(640,480,false,0x00FF00); 
var byteArray:ByteArray = new ByteArray(); 
bitmapData.encode(new Rectangle(0,0,640,480), new flash.display.JPEGEncoderOptions(), byteArray);
于 2012-11-13T15:55:43.503 回答
1

如果您收到运行时错误,则不能是缺少导入。您必须在太旧的 Flash Player 或太旧的 AIR 运行时中运行它。

我已经测试了PNG编码一段时间,并做到了这一点:

var bitmapData:BitmapData = yourBitmapDataHere;
if("encode" in bitmapData)
{
    // use the native encode method
    png = bitmapData.encode(bitmapData.rect, new PNGEncoderOptions(false));
}
else
{
    // use old png encoder (from AS3CoreLib)
    png = PNGEncoder.encode(bitmapData);
}

这有效地测试了您的播放器或运行时环境是否支持 BitmapData 的.encode()方法。如果该测试失败,则您必须使用太旧的播放器。

于 2012-11-14T10:37:06.313 回答
0

您确定在代码顶部包含该类吗?

于 2012-11-13T15:37:59.117 回答
0

您需要最新的 Flex SDK 来编译它,因为这些类仅在 Flash Player 11.3 中引入。Flex SDK 4.6对我有用,而 Flex SDK 4.5 及更低版本给了我相同的编译器错误。

如果它是一个运行时错误,那么您是在较低的 AIR 版本或较低的 Flash Player 版本中运行内容。如果您正在运行的 FP 版本中不存在该类,请使用以下方法回退到普通代码。对于 Web 内容很有用。

try {

    // use FP 11.3 encoding
    var options:Object = new JPEGEncoderOptions(quality);
    var bytes:ByteArray = new ByteArray();
    bitmap.encode(bitmap.rect, options, bytes);

} catch (e:Error){

    // use manual JPEG encoding
}
于 2013-05-02T17:07:28.453 回答
0

可能是您缺少目标版本的 playerglobal,或者 SDK 的播放器目录中的 playerglobal.swc 不正确。

如果可以,请下载最新的 Apache Flex SDK 并切换到该版本,并尝试在新项目或主应用程序中创建该类的实例。

老实说,我认为这是编译器或 playerglobal 中的错误。当我查看 sdk 文件夹时,我认为 playerglobal.swc 可能不正确(所有版本都命名为 playerglobal.swc)或者可能是因为我在使用的 SDK 中只有一个目录并且它有一个“/11.2/playerglobal.swc”但没有其他文件夹。我想我需要一个名为“/11.5/playerglobal.swc”的目录才能让-swf-version 有所作为。

如果在编译时未找到 swf 版本的 playerglobal 时编译器抛出错误,那就太好了。进入 SDK 文件夹并下载 playerglobals 并将其添加到 SDK 目录,以使最小目标播放器可以使用此类。

在我的 Flex 4.6.0 SDK 播放器目录中,“$Flash Builder/sdks/4.6.0/frameworks/libs/player/”中的 swcs:

  • 11.1 日期为 2012 年 10 月 30 日 351kb
  • 11.2 日期为 2013 年 1 月 27 日 352kb
  • 11.5 日期为 2014 年 11 月 23 日 351kb
  • 11.6 日期为 2013 年 1 月 27 日 352kb
  • 15.0 日期为 2014 年 11 月 20 日 388kb

在 Apache Flex 4.14RC 中安装是:

  • 11.1 日期为 2012 年 10 月 30 日 351kb
  • 11.2 日期为 2013 年 1 月 27 日 352kb
  • 11.5 日期为 2014 年 11 月 23 日 351kb
  • 11.6 日期为 2013 年 1 月 27 日 352kb
  • 15.0 日期为 2015 年 1 月 12 日 388kb

沿途某处安装了一些不同步的东西。

于 2015-07-07T12:54:49.137 回答