« 波紋エフェクト - DisplacementMapFilter | Main | Mouse.hide()の落とし穴 »

ゆがみエフェクト - DisplacementMapFilter

またDisplacementMapFilterを使って、Photoshopのゆがみ(ワープ)フィルタ。モナリザを使ったモノはありがちですけど、他にいいネタも無かったので。

フォトショっぽくクリックで変化させてもよかったですが、あまり変化量を上げすぎると画像が荒くなるので、微妙な変化の方が使えるんだと思います。

import flash.display.*;
import flash.filters.*;
import flash.geom.*;

var imgList:String = "image"; // リンケージ画像id

var w:Number = 240;
var h:Number = 360;
var scalex:Number = 0;
var scaley:Number = 0;
var d:Number = 0;

var scalemx:Number = 80; // xscale変化量
var scalemy:Number = 80; // yscale変化量
var r:Number = 60; // フィルタ適用範囲の直径
var speed:Number = 8; // 変化の移動速度

// -- 適用イメージ & マスク作成

var bmp:BitmapData = BitmapData.loadBitmap(imgList);
var copybmp:BitmapData = bmp.clone();

var mc:MovieClip = this.createEmptyMovieClip("img_mc", 2);
var mask:MovieClip = this.createEmptyMovieClip("mask_mc", 3);
var maskbmp:BitmapData = new BitmapData(w, h, false, 0);
mask.attachBitmap(maskbmp, 0);

var mgx:Number = (bmp.width-w)/2;
var mgy:Number = (bmp.height-h)/2;
mc._x -= mgx;
mc._y -= mgy;
mc.attachBitmap(bmp, 0);
mc.setMask(mask);

// -- 置き換えマップ用イメージ作成

var dpmap:BitmapData = new BitmapData(w, w, true, 0);
var dmc:MovieClip = this.createEmptyMovieClip("img_mc", 1);
var mrx:Matrix = new Matrix(1, 0, 0, 1, w/2, w/2);

dmc.beginGradientFill("radial", [0xFFFFFF, 0x808080], [100, 100], [0, r/2], mrx);
dmc.moveTo(0, 0);
dmc.lineTo(w, 0);
dmc.lineTo(w, w);
dmc.lineTo(0, w);
dmc.lineTo(0, 0);
dmc.endFill();

dpmap.draw(dmc);
dmc.removeMovieClip();

// -- フィルタ適用

function onEnterFrame ():Void {
    d += Math.PI/180*speed;
    scalex = Math.cos(d)*scalemx;
    scaley = Math.sin(d)*scalemy;
    var pos:Point = new Point(_xmouse-w/2+mgx, _ymouse-w/2+mgy);
    var dmf:DisplacementMapFilter = 
        new DisplacementMapFilter(dpmap, pos, 1, 1, scalex, scaley, "ignore");
    bmp.applyFilter(copybmp, bmp.rectangle, null, dmf);
}

TrackBack

このエントリーのトラックバックURL:
http://casualplay.net/cgi-bin/mt/mt-tb.cgi/24

Comments

左下にマウスもってくと揉んでる見たいやな(・∀・)

おっぱいシミュレーターね。
http://www.shockabsorber.co.uk/bounceometer/shock.html

エロ業界の方には是非活用していただきたい。

Post a Comment