天天看點

AS3.0中的顯示程式設計(末篇)-- 濾鏡(下)

     剩下的三種濾鏡,因為我自己也不是很懂矩陣啊這些的,隻能做些簡單的範例和說明了,抱歉!顔色矩陣濾鏡、卷積濾鏡、置換圖濾鏡這三種濾鏡隻能通過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,如需轉載請自行聯系原作者

繼續閱讀