FLASH AS实现马赛克效果_Flash教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:如何应用Flash制作标准的loading?
前言:网络中的swf影片是可以实现边下载边播放的,由于受到当前网络传输的制约,对于大容量的影片,这种实时播放并不理想。为避免受众尴尬的等待,flash制作人员

动画效果:

点击这里下载源文件

  一般实现马赛克有 2 种办法, 采用的都是遍历图像上的像素, 对相隔一定范围内的像素填充同一颜色, 只不过采样的颜色位置不同, 有选中心点的, 也有选范围内全部像素平均值的, 考虑到 flash 的效率问题, 这个是选择中心点的, 可以省掉大量循环

  同时注重 stride 要 4 的倍数, 不然的话.. 自己看吧. 哈哈(月光注:其实用2的倍数也就可以了)

import flash.display.BitmapData;
// 场景中摆个叫 img 的 mc 就 ok
var oldBmp:BitmapData = new BitmapData(img._width, img._height);
oldBmp.draw(img);
var newBmp:BitmapData = mosaic(oldBmp, 12);
var mc = createEmptyMovieClip("mc", 1);
mc.attachBitmap(newBmp, getNextHightestDepth());
mc._x = img._width;
function mosaic(bmp:BitmapData, stride:Number):BitmapData {
var startTime = getTimer();

var newBmp:BitmapData = new BitmapData(bmp.width, bmp.height);
var w = bmp.width / stride 1;
var h = bmp.height / stride 1;
var edgeW = bmp.width % stride; // 边缘不足 stride 的部分
var edgeH = bmp.height % stride;
var centerW = (stride-1)/2; // 第一格的中心点
var centerH = centerY; // 第一格永远是方的
var tmpX, tmpY; // 循环中的真实像素位置, 前面 w, h 被除过了..
var blockW, blockH; // 马赛克的格子

var i = -1;
while ( i < w) {
tmpX = i * stride;
if (i == w - 1){
blockW = edgeW;
} else {
blockW = stride;
}
centerW = (blockW - 1) / 2;
var j = -1;
while ( j < h) {
tmpY = j * stride;
if (i == h - 1){
blockH = edgeH;
} else {
blockH = stride;
}
centerH = (blockH - 1) / 2;
var color = bmp.getPixel(tmpX centerW, tmpY centerH);
var m = -1;
while ( m < blockW) {
var n = -1
while ( n < blockH) {
newBmp.setPixel(tmpX m, tmpY n,color);
}
}
}

}
trace("Cost : " (getTimer()-startTime));
return newBmp;
}

以上代码请用FLASH8编译执行.

分享:flash缓动效果
今天在做一个简单的flash动画时,发现了flash的一个比较好的特性。都怪自己很久没接触flash了,新的flash出了这么好的特性我竟然不知道。一直以来希望flash能像

来源:蓝色理想//所属分类:Flash教程/更新时间:2008-03-05
相关Flash教程