╋艺 镇╋╋网站网络|程序语言|Flash╋┣◇FLASH交流 → FLASH AS实现马赛克效果


  共有14788人关注过本帖树形打印复制链接

主题:FLASH AS实现马赛克效果

帅哥哟,离线,有人找我吗?
乐魔舞
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 天之飞雪
等级:青蜂侠 帖子:1427 积分:11370 威望:0 精华:7 注册:2007/12/25 16:21:28
FLASH AS实现马赛克效果  发帖心情 Post By:2007/12/28 [显示全部帖子]

face15|FLASH AS实现马赛克效果|乐魔舞||点击开新窗口欣赏该FLASH动画![全屏欣赏]
http://www2.flash8.net/UploadTeach/2006/04/14/200641494850862.swf http://www2.flash8.net/UploadTeach/2006/04/14/200641495157717.rar 一般实现马赛克有 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编译执行. |2007-6-25 17:36:23


  
“艺镇”官方站:www.zyzsky.com QQ群:1221854  回到顶部