代码改变世界

用2张JPG做PNG优化

2010-06-24 21:02  hbb  阅读(801)  评论(0编辑  收藏  举报

昨天在adobe dev上看到一篇文章,说用2张JPG可以优化PNG。我试了一下,效果还不错,但也不是任何PNG都能优化,当透明区域很大的时候,反而两张JPG会比PNG大。

不过看到他的算法,我就很没想法了。啰啰嗦嗦写了一大堆,连Vector都用上了...其结果就是替换通道而已。

重写了他的算法如下:

 

package  
{
	import flash.display.BitmapData;
	import flash.display.BitmapDataChannel;
	import flash.geom.Point;
	
	/**
	 * ...
	 * @author hbb
	 */
	public class JPG2PNG extends BitmapData
	{
		
		public function JPG2PNG( colorJPG:BitmapData, greyJPG:BitmapData ) 
		{
			super( colorJPG.width, colorJPG.height, true, 0 );
			
			var origin:Point = new Point();
			
			copyPixels( colorJPG, colorJPG.rect, origin );
			
			copyChannel( greyJPG, colorJPG.rect, origin, BitmapDataChannel.BLUE, BitmapDataChannel.ALPHA );
		}
		
	}

}

这样一来,应该Flash8就能支持了吧...

不过看了他的demo后,也让我发现一个奥妙的事情。

Trevor的一篇教程里面说了,拖到timeline上的bitmap在发布的时候是用shape来呈现的。估计是背后自动beginBitmapFill。所以在一个空mc里面拖再多bitmap,numChildren始终为1,而且getChildAt(0)的类型是Shape。

但是demo里面我发现两个拖到场景上的图片竟然是两个Bitmap,研究半天,仔细一看,原来demo里面的两个bitmap都设置了class(linkage)。属性不一样了.... orz