剩下的三種濾鏡,因為我自己也不是很懂矩陣啊這些的,隻能做些簡單的範例和說明了,抱歉!顔色矩陣濾鏡、卷積濾鏡、置換圖濾鏡這三種濾鏡隻能通過AS代碼實作。如果說上面的六種濾鏡,隻是在原圖的基礎上做些簡單的修改,那麼這三種濾鏡,就可以稱之為大手術了,讓我們繼續往下看:
<b>(</b><b>7</b><b>)顔色矩陣濾鏡(</b><b>ColorMatrixFilter</b><b>)</b>
顔色矩陣濾鏡用于過濾顯示對象的顔色和Alpha值。可以進行飽和度的更改、色相旋轉、将亮度更改為 Alpha,以及生成其它顔色操作效果等等。
我這邊舉一個例子,大家先看效果圖:
在那些全國悲傷的日子,我們需要停止娛樂節目,把Flash變灰來表示我們沉痛的哀悼。這種變灰的效果當然有很多方式來實作,最簡便的是用JS控制網頁。上次看到百度有人問,在Flash裡要怎麼實作這個效果,最佳回答是在屬性面闆裡修改顔色。汗,這樣需要多大的工程量啊!其實不用那麼麻煩,隻要做一個顔色矩陣濾鏡并應用就可以實作這個效果了。
AS代碼如下,具體内容我就不解釋了,不要求學會:
var matrix:Array = new Array();
matrix = matrix.concat([0.3086, 0.6094, 0.082, 0, 0]); // red
matrix = matrix.concat([0.3086, 0.6094, 0.082, 0, 0]); // green
matrix = matrix.concat([0.3086, 0.6094, 0.082, 0, 0]); // blue
matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha
var gray:ColorMatrixFilter = new ColorMatrixFilter(matrix);
var filtersArray:Array = new Array(gray);
tt.filters = filtersArray;
<b>(</b><b>8</b><b>)卷積濾鏡(</b><b>ConvolutionFilter</b><b>)</b>
卷積濾鏡可用于對BitmapData對象或顯示對象應用一些特殊的圖像變形,如模糊、銳化、浮雕、背反、光亮等。
<b>模糊效果:</b>
AS代碼如下:
matrix = matrix.concat([0, 1, 0]);
matrix = matrix.concat([1, 1, 1]);
var convolution:ConvolutionFilter = new ConvolutionFilter();
convolution.matrixX = 3;
convolution.matrixY = 3;
convolution.matrix = matrix;
convolution.divisor = 5;
var filtersArray:Array = new Array(convolution);
<b>銳化效果:</b>
matrix = matrix.concat([0, -1, 0]);
matrix = matrix.concat([-1, 5, -1]);
convolution.divisor = 1;
<b>浮雕效果:</b>
AS代碼:
matrix = matrix.concat([-2, -1, 0]);
matrix = matrix.concat([-1, 1, 1]);
matrix = matrix.concat([0, 1, 2]);
<b>背反效果:</b>
matrix = matrix.concat([-1, 4, -1]);
<b>光亮效果:</b>
matrix = matrix.concat([5, 5, 5]);
matrix = matrix.concat([5, 0, 5]);
convolution.divisor = 30;
<b>(</b><b>9</b><b>)置換圖濾鏡(</b><b>DisplacementMapFilter</b><b>)</b>
置換圖濾鏡使用BitmapData對象(稱為置換圖圖像)中的像素值在新對象上執行置換效果。通常,置換圖圖像與将要應用濾鏡的實際顯示對象不同。置換效果包括置換過濾的圖像中的像素,也就是說,将這些像素移開原始位置一定距離。此濾鏡可用于産生移位、扭曲或斑點效果。
由于這個濾鏡本身比較複雜,要比較好的表現效果,又需要兩幅特定的圖,本人懶,就簡單的做一個平移效果吧。
var mapImage:BitmapData = new BitmapData(tt.width, tt.height, false, 0xFF0000);
var displacementMap = new DisplacementMapFilter();
displacementMap.mapBitmap = mapImage;
displacementMap.mapPoint = new Point(0, 0);
displacementMap.componentX = BitmapDataChannel.RED;
displacementMap.scaleX = 250;
var filtersArray:Array = new Array(displacementMap);
濾鏡這章到此就結束了,整個顯示程式設計也告一段落。但其實Flash裡的顯示程式設計,内容很廣,包括我下章第一篇的文本,也是顯示程式設計的一部分。不過,我還是按照常用了解的習慣,歸納到元素這一塊去了。
本文轉自 windtoto 51CTO部落格,原文連結:http://blog.51cto.com/windtoto/405985,如需轉載請自行聯系原作者