Flash 8 Professional Copy Pixels位圖象素復(fù)制 Author:Allan 轉(zhuǎn)載請注明出處:Allan.Blog()
除了Flash 8 中自帶的各種簡單Filter濾鏡效果之外,還對bitmapData位圖對象提供了非常強大的象素操作。當(dāng)然,有了象素級的操作,最直接的用途就是我們可以直接控制位圖中的每個點,改變他的顏色、位置,能直接創(chuàng)造屬于自己的豐富的濾鏡,當(dāng)然,前途是美好的,一定要注意執(zhí)行效率,雖然Flash Player8的效率已經(jīng)大為提高,不過我還是在試驗各種象素操作中誤入超大運算而死機……。
今天的例子是最為簡單的一個得到象素并復(fù)制到一個新對象中的操作,不過有了這個功能,位圖操作的可能性就無限量了。
import flash.display.*; import flash.geom.*; //導(dǎo)入本例所需要的二個Pageage
var sourceBD:BitmapData = BitmapData.loadBitmap(”mypic”); //創(chuàng)建bitmapData對象以用于存放源圖片,源圖已在庫中并命名為mypic
var mc:MovieClip = this.createEmptyMovieClip(”mc”, this.getNextHighestDepth()); mc._x = 25; mc._y = 100; mc.attachBitmap(sourceBD,mc.getNextHighestDepth()); //在Stage上創(chuàng)建空MC,并使用MC的attachBitmap方法將剛才創(chuàng)建的bitmapData對象讀取到這個MC中
var targetBD:BitmapData = new BitmapData(230, 230, false, 111111); //創(chuàng)建另一個bitmapData對象作為復(fù)制目標(biāo)
var mc2:MovieClip = this.createEmptyMovieClip(”mc”, this.getNextHighestDepth()); mc2._x = 290; mc2._y = 100; mc2.attachBitmap(targetBD,mc.getNextHighestDepth()); //同樣在Stage上創(chuàng)建空MC用于存放復(fù)制目標(biāo)
mc.onRollOver = function() { //當(dāng)鼠標(biāo)移動到擁有源圖的MC上時,開始CopyPixels copyPixels(); }; mc.onRollOut = function() { //移出狀態(tài)停止Copy stopcopyPixels(); }; //Copy Pixels Function function copyPixels() { this.onMouseMove = function() { setCursor();//設(shè)置鼠標(biāo)光標(biāo) var point:Point = new Point(_xmouse, _ymouse); mc.globalToLocal(point); //得到當(dāng)前鼠標(biāo)座位,并使用globalToLocal轉(zhuǎn)換為MC內(nèi)部的坐標(biāo)值 var rect:Rectangle = new Rectangle(point.x, point.y, 20, 20); /*創(chuàng)建一個Rectangle對象用以確定要復(fù)制的矩形區(qū)域 Rectangle對象是Flash8中新增對象,包的位置在flash.geom.Rectangle,flash.geom對象除了擁有Rectangle矩形數(shù)據(jù)對象之外,還有其它用于存放幾何數(shù)據(jù)的對象類型,包括Point,Tranform等 Rectangle的構(gòu)造方式為 public Rectangle(x:Number, y:Number, width:Number, height:Number) x,y:起始座位 width,height:矩形的寬和高,最終將建立一個從 x,y到 x+width,y+height的矩形區(qū)域數(shù)據(jù) */ var dest:Point = new Point(point.x, point.y); //建立dest對象用于存放目標(biāo)點 targetBD.copyPixels(sourceBD,rect,dest); /*這里就是本例操作的關(guān)鍵方法,copyPixels,用于將源圖中的某個區(qū)域的象素復(fù)制到當(dāng)前對象中 構(gòu)造方式為public copyPixels(sourceBitmap:BitmapData, sourceRect:Rectangle, destPoint:Point, alphaBitmap:BitmapData, alphaPoint:Point, mergeAlpha:Boolean) sourceBitmap:需要復(fù)制的源圖,為BitmapData對象類型,這里就套用為前面建立的sourceBD sourceRect:復(fù)制區(qū)域 deskPoint:目標(biāo)點,明確將區(qū)域復(fù)制到本對象的哪一個位置,本例中完全還原源圖的象素所在位置
以下幾個參數(shù)在本例中都沒有使用到 alphaBitmap和alphaPoint:表示可以通過另一個圖片用于在復(fù)制的時候?qū)υ磮D產(chǎn)生一個alpha通道來創(chuàng)建帶alpha通道效果的復(fù)制結(jié)果. mergeAlpha的屬性是指是否啟用源圖的alpha通圖,但目前沒有調(diào)試出具體效果,有待再研究.*/ }; } function stopcopyPixels() { //停止copyPixels clearCursor(); delete this.onMouseMove; } function setCursor() { //設(shè)置鼠標(biāo)為方型圖案 sourceCursor_mc.swapDepths(_root.getNextHighestDepth()); sourceCursor_mc.startDrag(true); targetCursor_mc.swapDepths(_root.getNextHighestDepth()); targetCursor_mc._x = sourceCursor_mc._x+265; targetCursor_mc._y = sourceCursor_mc._y; Mouse.hide(); } function clearCursor() { //恢復(fù)鼠標(biāo) sourceCursor_mc.stopDrag(); sourceCursor_mc._x = -50; sourceCursor_mc._y = -50; targetCursor_mc._x = -50; targetCursor_mc._y = -50; Mouse.show(); }
帶alpha通道圖象進行復(fù)制的例子
需要Flash Player 8 [源文件下載,需要FLASH 8]
例子比較簡單,不過看起來已經(jīng)是Photoshop圖章功能的拙形了。當(dāng)然,如果用Flash制作圖章功能的話,更多功能可以挖掘出來了,可以復(fù)制的時候只復(fù)制某個色彩…或直接復(fù)制為單色圖片…或…XXXX。
出處:AllanBlog
責(zé)任編輯:藍(lán)色
◎進入論壇Flash專欄版塊參加討論
|