欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Flex 缩略图的实现

程序员文章站 2022-03-19 17:52:42
...

      最近一直在弄Flex,其中有一个功能就是缩略图,缩略图的场景是:有一个Canvas的容器,这个容器中有很多的显示对象,实现该容器的一个缩略图。(注意:该Canvas容器只显示了一部分,其他部分需要移动滚动条才能看到)

      方法一(借助ImageSnapshot.captureBitmapData方法):

      1、计算出Canvas中所有显示对象右下角的最大X坐标和最大的Y坐标(_maxX,_maxY):

 

var point:Point = caculateMaxPoint(canvas);//canvas为需要缩略的Canvas容器。caculateMaxPoint方法计算该容器中显示对象的X,Y最大的点。

var _maxX:Number = point.x ;

var _maxY:Number = point.y ;

 

      2、将Canvas的width和height分别设置为_maxX和_maxY:

 

canvas.width = _maxX;

canvas.height = _maxY;

         注意: 这一步非常重要,如果没有这个设置,那么使用ImageSnapShot.caputreBitmapData方法获取到的只是Canvas容器当前显示的部分,而不能获取到所有的显示对象。

     3、计算缩略的比例:

 

var matrix : Matrix = new Matrix();

matrix.scale(width/_maxX , height / _maxY);//其中width和height是缩略图所存放容器的宽度和高度。

      4、获取Canvas容器的BitmapData数据:

 

var bitmapData:BitmapData = ImageSnapShot.captureBitmapData(canvas , matrix);

var bitMap:BitMap = new BitMap(bitmapData);

      5、将4步骤中生成的bitMap作为缩略图容器的中<mx:Image>的source。这样Canvas容器的缩略图就出来了。

      6、最后将Canvas容器的width和height恢复为初始的宽度和高度。

      7、当然还有缩略图和原图之间的联动,我是通过缩略图的坐标按照缩放的比例找出原图的坐标,并定位滚动条的位置,这里就不描述了。

      我使用这个方法时遇到的一个问题:使用ImageSnapShot.captureBitmapData(canvas , matrix)时,会对原图缩小然后拍下快照,再将原图恢复。这个过程一般情况下客户是看不到的,但是如果频繁调用这个方法,会导致如果原图出现缩小,然后恢复的过程,这样就影响到原图的效果,目前没有找到解决方法。

      方法二(只是思路):使用COPY 的方法,在Canvas 容器中添加一个属性thumbNailCanvas,它是Canvas 容器的一个复制,任何对Canvas容器的改变,同时也改变thumbNailCanvas。

相关标签: Flex