【问题标题】:How to copyPixels() on AS3 from a huge BitmapData?如何从巨大的 BitmapData 在 AS3 上复制像素()?
【发布时间】:2011-04-08 09:10:11
【问题描述】:

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

问题是,我正在加载那个大小的 .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);

但我收到了 #2015“无效的 BitmapData”错误,通常为太大的 BitmapDatas 保留。如果我尝试执行 copyPixels(),也会发生错误,这是我需要做的。

有什么解决方法可以让我从 AS3 上这么大的图像中获取数据吗?

【问题讨论】:

    标签: flash actionscript-3 image bitmapdata


    【解决方案1】:

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

    Source

    【讨论】:

      【解决方案2】:

      很遗憾,在 AS3/FlashPlayer 中使用标准 BitMap 类无法做到这一点。

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

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

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

      为了得到你想要的像素。

      【讨论】:

      • 谢谢,我要试试看。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多