在 AIR 3.5 中运行以下代码时,我收到一个运行时错误,即 JPEGEncoderOptions 是一个未定义的变量:
rawBitmapData.encode(rawBitmapData.rect, new JPEGEncoderOptions(), rawByteArray);
在 AIR 3.5 中运行以下代码时,我收到一个运行时错误,即 JPEGEncoderOptions 是一个未定义的变量:
rawBitmapData.encode(rawBitmapData.rect, new JPEGEncoderOptions(), rawByteArray);
确保您的 sdk 中的以下文件在文件夹 \yoursdk\frameworks\ 中是最新的
air-config.xml flex-config.xml airmobile-config.xml
更新这个:
<target-player>11.5</target-player>
<swf-version>18</swf-version>
这可确保您的运行时是最新的 请参阅:将 Adobe Air 3.3 SDK 与 Flash Builder 一起使用
您可能缺少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);
如果您收到运行时错误,则不能是缺少导入。您必须在太旧的 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()
方法。如果该测试失败,则您必须使用太旧的播放器。
您确定在代码顶部包含该类吗?
您需要最新的 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
}
可能是您缺少目标版本的 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:
在 Apache Flex 4.14RC 中安装是:
沿途某处安装了一些不同步的东西。