• 处理非常大的图像解决方案


       如果你曾经试图在Adobe Flex或Adobe Flash中使用很大的图像文件,可能已经遇到过这个问题。回到Flash Player 8/9,你不可能显示大于2880x2880像素的图像,现在,在Flash Player 10,你可以创建16769025像素BitmapData对象(不论是4095x4095,3353805x5,2048x8191,或任何其他组合,只要低于16769025像素)。这是对于用大图像工作是真正地得到了极大的改善,但是,如果你想要加载一张超过16769025像素的图像,或者如果你想缩放一个包含16769025像素的图像怎么办呢?
        这里有一个窍门,你可以用大的图片浏览,放大,甚至与它们进行交互。注意的是这种方法只有对静态图像才行之有效。如果你试图让它动起来,计算量将极端地密集。
        因此,我们已经了解了显示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选项可以完成缩放操作。

    代码
    matrix.translate( translateX, translateY );
    cropper.draw( sourceContent, matrix );
    drawSource 
    = new Bitmap( cropper );
    scaleMatrix.scale( _scale, _scale );
    finalBitmapData.draw( cropped, scaleMatrix, 
    nullnullnulltrue );
    drawSource 
    = new Bitmap( finalBitmapData ); 


     

  • 相关阅读:
    20209/29
    2020/9/30
    2020/10/1
    ATM测试总结报告
    20201020 千锤百炼软工人
    20201024 千锤百炼软工人
    20201025 千锤百炼软工人
    20201023 千锤百炼软工人
    20201018 千锤百炼软工人
    20201022 千锤百炼软工人
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/1616929.html
Copyright © 2020-2023  润新知