JPEGEncoderOptions is undefined

ぐ巨炮叔叔 提交于 2019-12-11 03:04:05

问题


I get a runtime error that JPEGEncoderOptions is an undefined variable when running the below code in AIR 3.5:

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

回答1:


Make sure the following files in your sdk are up-to-date in the folder \yoursdk\frameworks\

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

Update this:

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

This ensures your runtime is up-to-date See : Use Adobe Air 3.3 SDK with Flash Builder




回答2:


You may be missing an import of the flash.display.JPEGEncoderOptions package, or you may fully quality the package inline as below.

Example from Adobe Flash Platform Compressing bitmap data:

// 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);



回答3:


If you get a runtime error, it can't be a missing import. You must be running it in a Flash Player that's too old, or an AIR runtime that's too old.

I've tested PNG encoding a while back and did this:

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);
}

This effectively tests if your player or runtime environment supports BitmapData's .encode() method. If that test fails, you must be using a player that's too old.




回答4:


Are you definitely including the class at the top of your code?




回答5:


You need the latest Flex SDK to compile that, because those classes were only introduced in Flash Player 11.3. Flex SDK 4.6 worked for me, while Flex SDK 4.5 and lower gave me the same compiler error.

If its a runtime error, then you are running the content in a lower AIR version, or in a lower Flash Player version. Use the following method to fallback to normal code if the class is not present in the FP version you are running in. Useful for web content.

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
}



回答6:


It may be that you are missing a playerglobal for the version you are targeting or it's an incorrect playerglobal.swc in the SDK's player directory.

Download the latest Apache Flex SDK and switch to that if you can and try to create an instance of the class in a new project or your main application.

Honestly, I think it was a bug in the compiler or playerglobal. When I looked at the sdk folders I think that the playerglobal.swc might have been incorrect (all versions are named playerglobal.swc) OR it might have been the fact that I only had one directory in the SDK I was using and it had an "/11.2/playerglobal.swc" but no other folders. I think I would have needed a directory called "/11.5/playerglobal.swc" to have -swf-version make any difference.

It would be nice if the compiler threw an error when the playerglobal for the swf-version was not found at compile time. Go into the SDK folder and download and add the playerglobals to the SDK directory for the minimum targeted player to use this class.

In my Flex 4.6.0 SDK player directory, "$Flash Builder/sdks/4.6.0/frameworks/libs/player/" the swcs in:

  • 11.1 dated 10/30/2012 351kb
  • 11.2 dated 01/27/2013 352kb
  • 11.5 dated 11/23/2014 351kb
  • 11.6 dated 01/27/2013 352kb
  • 15.0 dated 11/20/2014 388kb

In the Apache Flex 4.14RC install is:

  • 11.1 dated 10/30/2012 351kb
  • 11.2 dated 01/27/2013 352kb
  • 11.5 dated 11/23/2014 351kb
  • 11.6 dated 01/27/2013 352kb
  • 15.0 dated 01/12/2015 388kb

It's possible something was installed somewhere along the way that is out of sync.



来源:https://stackoverflow.com/questions/13363557/jpegencoderoptions-is-undefined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!