这里有一个窍门,你可以用大的图片浏览,放大,甚至与它们进行交互。注意的是这种方法只有对静态图像才行之有效。如果你试图让它动起来,计算量将极端地密集。
因此,我们已经了解了显示BitmapData对象的限制...你知道如何从一个URL加载超过16769025像素的大图像吗?但是实际上由于屏幕分辨率,图像不会显示,同样,即使你载入一个小于16769025像素的图像,拉伸/缩放图像超过16769025,那么它也不会显示在屏幕上。
如果您加载一个较大的图像,或拉伸图像超过16769025,只要你不将它添加至显示列表,你仍然可以执行图片的操作。例如,你仍然可以执行bitmapData.draw(source), 其中source源大于16769025像素,即使BitmapData对象本身小于16769025像素。通过篡改对象的bitmapData方式渲染对象,实际上你可能有其它渲染内容的想法是不可行的。你可以缩小图像,使整个内容得到展示,也可以放大图像,但只会显示图像的一部分,当放大时,没有限制,无论你放大到多少。你可以将4000x4000图像放大10倍(成为40000x40000可视对象),绘制它显示到屏幕可见区域。
在我们讨论工作原理前,先看看它的能力。下面你会看到一张4400x5800的屏幕截图,缩放它到很远。下面,你会发现一个互动的例子来测试图像,有放大缩小平移等动作。
当发生这种情况时,加载内容至mx:Image对象,但该对象从未添加到舞台,相反,在invalidateDisplayList()函数BigImage容器中,源图像内容渲染成为BitmapData对象,接着将它设置为另一个图像对象的源,获取后添加到显示列表。现在,你不能同时在大于16769025像素的图像上执行缩放scale和修剪crop(translate)操作。如果你想要显示超过16769025像素限制的内容,首先,你需要将要被缩放的BitmapData对象的从左上角0,0位置开始修剪成你期望的可见区域,修剪完成以后,你可以绘制渲染得到BitmapData对象,只要对象的尺寸不超过BitmapData的最大尺寸。Translation平移可以在bitmapData.draw操作时给出Matrix选项,利用scale选项可以完成缩放操作。
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
matrix.translate( translateX, translateY );
cropper.draw( sourceContent, matrix );
drawSource = new Bitmap( cropper );
scaleMatrix.scale( _scale, _scale );
finalBitmapData.draw( cropped, scaleMatrix, null, null, null, true );
drawSource = new Bitmap( finalBitmapData );
cropper.draw( sourceContent, matrix );
drawSource = new Bitmap( cropper );
scaleMatrix.scale( _scale, _scale );
finalBitmapData.draw( cropped, scaleMatrix, null, null, null, true );
drawSource = new Bitmap( finalBitmapData );