查看完整版本: Flash 8 Professional Copy Pixels位图象素复制

黑不白 2006-5-7 02:15

Flash 8 Professional Copy Pixels位图象素复制

除了Flash 8 中自带的各种简单Filter滤镜效果之外,还对bitmapData位图对象提供了非常强大的象素操作。当然,有了象素级的操作,最直接的用途就是我们可以直接控制位图中的每个点,改变他的颜色、位置,能直接创造属于自己的丰富的滤镜,当然,前途是美好的,一定要注意执行效率,虽然Flash Player8的效率已经大为提高,不过我还是在试验各种象素操作中误入超大运算而死机……。
A7_8J J!O0~ _   今天的例子是最为简单的一个得到象素并复制到一个新对象中的操作,不过有了这个功能,位图操作的可能性就无限量了。(NQP%J;{.K n
  Flash代码: |3q,x8@7Ht
import flash.display.*; import flash.geom.*; //导入本例所需要的二个Pageage#U5y&\F,^F R6f:I
var sourceBD:BitmapData = BitmapData.loadBitmap(”mypic”);r2@^9qh/eB%k2u
//创建bitmapData对象以用于存放源图片,源图已在库中并命名为mypic2aW+_q&?-u
var mc:MovieClip = this.createEmptyMovieClip(”mc”, this.getNextHighestDepth());
$\&TZ4m z[0O)w mc._x = 25;
&C5EQB3A `.{ mc._y = 100;
[~C:@O]'c mc.attachBitmap(sourceBD,mc.getNextHighestDepth());
Mk)Wn6tBsOj //在Stage上创建空MC,并使用MC的attachBitmap方法将刚才创建的bitmapData对象读取到这个MC中"SF UR"cL.Yh
var targetBD:BitmapData = new BitmapData(230, 230, false, 111111);
"sL B5wV*k~S //创建另一个bitmapData对象作为复制目标
,R!X7{%V*Sx{2uv x3T{ var mc2:MovieClip = this.createEmptyMovieClip(”mc”, this.getNextHighestDepth());l#KR?1m*Q-Y
mc2._x = 290;
;Hn^,s gP mc2._y = 100;
d.sB] BC0kgW mc2.attachBitmap(targetBD,mc.getNextHighestDepth());9\X9U%@ zkHV$P?#u
//同样在Stage上创建空MC用于存放复制目标 Y-X0{/y H-r cf
mc.onRollOver = function() {xr%[B*y f tm
//当鼠标移动到拥有源图的MC上时,开始CopyPixels7q sA2p y&up6Hc&I
copyPixels();QGw#n.wf C)nU
};H7sGT}+C,{4Xty.h
mc.onRollOut = function() {
TV+I)qA m nX //移出状态停止Copy|-c-w:QPW3T8G
stopcopyPixels();d!r'LMU8Q#z
};6R["TP,boR%~
//Copy Pixels FunctionhuK[;j2K,b
function copyPixels() {
$k+p5? n(x;d,l]z"a this.onMouseMove = function() {
9j3flMK$V setCursor();//设置鼠标光标
T#R/x |"?Vi1H1i%~'C7}U var pointV*r:K|4RF-Gg
[img]http://95guge.com/bbs/images/smilies/tongue.gif[/img]H+GC)W@#K~
oint = new Point(_xmouse, _ymouse); g%s(M/G5gC
mc.globalToLocal(point);
_5i|V1w?%Va //得到当前鼠标座位,并使用globalToLocal转换为MC内部的坐标值QP9|8w| ju)b I%J
var rect:Rectangle = new Rectangle(point.x, point.y, 20, 20);
M!K,D%oQ5{k /*创建一个Rectangle对象用以确定要复制的矩形区域
/K g~|M `i;n Rectangle对象是Flash8中新增对象,包的位置在flash.geom.Rectangle,flash.geom对象
}@eR4R3nM1E+U 除了拥有Rectangle矩形数据对象之外,还有其它用于存放几何数据的对象类型,包} v9f7MpQ1cu
括Point,Tranform等F9g|O/z"H-u
Rectangle的构造方式为.B/y^#LB3x9z
public Rectangle(x:Number, y:Number, width:Number, height:Number)s7Oj4U+Bbv
x,y:起始座位
l Oi!zZ}s2x*Jy width,height:矩形的宽和高,最终将建立一个从 x,y到 x+width,y+height的矩形区域数据
O)u,K Z"}Jy"e */
!_y ^V*wn:z$V c$} var dest
Jx RO?(gs9}]8Z} [img]http://95guge.com/bbs/images/smilies/tongue.gif[/img]
1rc"Hk-H$Rk.wv oint = new Point(point.x, point.y);
{bJio5Y ~c`Z //建立dest对象用于存放目标点5M%Z#B.HW:g O-ca
targetBD.copyPixels(sourceBD,rect,dest);hu!C3z3yz$dZ3c7E:vN
/*这里就是本例操作的关键方法,copyPixels,用于将源图中的某个区域的象素复制到当前P`6j G4^0u7IW
对象中构造方式为public copyPixels(sourceBitmap:BitmapData, sourceRect:Rectangle,)kpsDgi#w-Q
destPoint
.^.kxF.B6n~mw [img]http://95guge.com/bbs/images/smilies/tongue.gif[/img] t` {X }H#R9k5Z
oint, alphaBitmap:BitmapData, alphaPoint mqK.D#Y UF;Bc
[img]http://95guge.com/bbs/images/smilies/tongue.gif[/img]D5V9Q&b-A(A:k
oint, mergeAlpha:Boolean))U AU(I#c9m(Hz+E"Z
sourceBitmap:需要复制的源图,为BitmapData对象类型,这里就套用为前面建立的sourceBD
k1m+MI ]d9t:jf sourceRect:复制区域:srtj A u^;Z
deskPoint:目标点,明确将区域复制到本对象的哪一个位置,本例中完全还原源图的象素所在位置1q$lS'\Cp`
以下几个参数在本例中都没有使用到
R i2G2[Kx%~/S alphaBitmap和alphaPoint:表示可以通过另一个图片用于在复制的时候对源图产生一个alpha通道
RsBGM_v 来创建带alpha通道效果的复制结果.
'wPI.k&c/@Dr mergeAlpha的属性是指是否启用源图的alpha通图,但目前没有调试出具体效果,有待再研究.*/
`T)K'@4d^ };*DUc+m!Te
}B7c1RAV@ G
function stopcopyPixels() {6UF[8kj"f WQ
//停止copyPixels
v^[H;P8\[ clearCursor();v\9VK3?
delete this.onMouseMove;?7e`y&Q0s4`
}-n.m3A-^l"u#G-Q mQ w
function setCursor() {
;A({ Kpk ^b3Uu:~r //设置鼠标为方型图案$t v-le Y#b@6N
sourceCursor_mc.swapDepths(_root.getNextHighestDepth());
jGub3V sourceCursor_mc.startDrag(true);
qc*p+vfU j targetCursor_mc.swapDepths(_root.getNextHighestDepth());
8UFE3h.B targetCursor_mc._x = sourceCursor_mc._x+265;,h^:K,gnX }6qh
targetCursor_mc._y = sourceCursor_mc._y;
Je7xY R:}L Mouse.hide();
Zf rl'Z'Ri6e~ }$U!r#K8Z_SY3{Y
function clearCursor() { F z(`}t ^t
//恢复鼠标S` jd,x;yA
sourceCursor_mc.stopDrag();
0S3TGf.J j sourceCursor_mc._x = -50;
:]%r:c N]Na sourceCursor_mc._y = -50;!](B~cZ&?+`
targetCursor_mc._x = -50;Ng-U+r-L[B$j3Ofl
targetCursor_mc._y = -50;f;~0VHtvl
Mouse.show();&LRP1fF7g:a7A yj
}
页: [1]
查看完整版本: Flash 8 Professional Copy Pixels位图象素复制
查看完整版本: Flash 8 Professional Copy Pixels位图象素复制