论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash教程
Tag:flash cs,flash 8,鼠绘,as,手绘,工具,文字,loading,入门,初学,mc,影片剪辑,声音,mtv,游戏,引导,遮罩,菜单,补间,广告条,时钟,视频教程

FLASH AS实现马赛克效果

文章类别:Flash | 发表日期:2008-9-21 19:42:26

  

源文件下载:
a.rar
/UploadTeach/2006/04/14/200641494850862.swf
    一般实现马赛克有 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 实现动态模糊效果 人气:1126
下一篇:{应用}flash缓动效果 人气:2109
视频教程列表
文章教程搜索
 
Flash推荐教程
Flash热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058