如何从巨大的BitmapData复制AS3上的像素()?

时间:2010-09-05 04:08:11

标签: flash actionscript-3 image bitmapdata

我需要在AS3上加载一个非常大的图像(目前大小为8192x8192)。我知道它不符合Flash对绘制到屏幕或创建该大小的BitmapData所施加的任何限制。我只是想加载图像,所以我可以在这里和那里copyPixels()的一些部分。

问题是,我正在加载那个大小的.jpg文件,没有任何问题。从我的Loader对象中正确识别大小。我像这样加载它:

mImageLoader = new Loader();
var anImageURLRequest:URLRequest = new URLRequest("8192x8192.jpg");
mImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
mImageLoader.load(anImageURLRequest);

然后,在onComplete方法上,我尝试这样做:

Bitmap(mImageLoader.content).bitmapData.getPixel(1000, 1000);

但是我很高兴看到通常为BitmapDatas保留的#2015“Invalid BitmapData”错误太大了。如果我尝试执行copyPixels(),也会发生错误,这就是我需要做的事情。

我可以使用任何解决方法,因此我可以从AS3上的图像中获取数据吗?

2 个答案:

答案 0 :(得分:2)

不幸的是,使用标准的BitMap类,AS3 / FlashPlayer无法做到这一点。

但是,您可以尝试使用bytearray.org的JPEG解码器将文件作为原始ByteArray读取,然后确定您需要的像素。 - 我无法保证它能与8192x8192px图像配合使用,但值得一试,因为它不依赖于Flash显示系统。

如果您使用此方法,请记住像素存储在单个矢量中,因此您需要执行以下操作:

var pixel:int = pixels[ ( width * y ) + x ];

获取你想要的像素。

答案 1 :(得分:0)

从AIR 3和Flash Player 11开始,已删除BitmapData对象的大小限制。现在,位图的最大大小取决于操作系统。

Source