2009-12-03 196 views

回答

1
var n:Number = 1/3; 
var matrix:Array = [n,n,n,0,0, 
        n,n,n,0,0, 
        n,n,n,0,0, 
        0,0,0,1,0]; 

var cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix); 
bitmap.filters = [cmf]; 
+0

不是LopSae和我的完全一樣,只是它調整了光度值?爲什麼我不能評論LopSae的答案?非常奇怪...... 對於矩陣中的每個值所做的操作,請參閱: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/filters/ColorMatrixFilter.html – alecmce 2009-12-04 10:29:17

+0

@LopSae - 我是新的StackOverflow,還沒有完全制定出所有的特質,謝謝! ;)您看到的差異可能非常微妙,取決於源圖像。如果您使用的是相對明亮,大膽的顏色的測試圖像,那麼與具有微妙陰影的圖像相比,不同的值將具有更少的可見效果... – alecmce 2009-12-05 15:16:20

+0

它的數學並不太難......對於每個像素,它將採用像素顏色的紅色,綠色和藍色分量,並將它們乘以矩陣中的第一個第二個和第三個元素(在我的例子中爲1/3,在您的情況下爲0.2,0.7,0.1),將它們加在一起並把這個結果作爲紅色值。然後,它採用與像素顏色相同的分量,並將它們乘以矩陣中的第六,第七和第八個元素,然後將它們設置爲綠色。類似於第11,12和13日的藍色。這會產生灰度,因爲在結果中紅色,綠色和藍色的部分是相同的。 – alecmce 2009-12-05 15:20:14

1

在一般情況下,假設你開始與RGB圖像,將其轉換爲HSI色彩空間,並使用我(強度)組件。

1

要將圖像轉換爲灰度圖,需要遍歷圖像緩衝區中的每個像素,並將R,G和B分量平均到一個實體中,然後複製三次以獲得新顏色。僞代碼(假設8位顏色):

for each pixel in buffer: 
    pixel.rgb = ((pixel.red + pixel.green + pixel.blue)/3) * 0x010101; 

我相信你可以用Adobe的PixelBender做些事情來達到這個目的。

+0

或者,強度有時被定義爲max(R,G,B)。 – Dima 2009-12-03 23:34:09

0

應用通過該方法爲DisplayObject包含您在黑色和白色想要的圖像創建的濾波器:

public static function createBlackAndWhiteFilter():ColorMatrixFilter { 
    var rLum:Number = 0.2225; 
    var gLum:Number = 0.7169; 
    var bLum:Number = 0.0606; 

    var bwMatrix:Array = [rLum, gLum, bLum, 0, 0, rLum, gLum, bLum, 0, 0, rLum, gLum, bLum, 0, 0, 0, 0, 0, 1, 0]; 
    return new ColorMatrixFilter(bwMatrix); 
}//createBlackAndWhiteFilter 
+0

即使我完全不理解,我也會試試這個! 但是: 對於具體數值代表什麼,爲什麼數組中有20個必需的值? 也許我不應該問很多,只是使用它...:-J – algro 2009-12-04 08:18:00

+0

數組中的20個值是製作一個5x4的矩陣,它實際上與alecmce在同一個問題中發佈的矩陣幾乎相同,只是寫了它在一條線上。不同的值與我知道的每種組分顏色的不同光強度有關。所以你在不同的措施中減少每種顏色的強度,使每個顏色變成灰色陰影。 – LopSae 2009-12-05 03:06:11

+0

@alecmce:我們不能評論彼此的答案,因爲我們還沒有50個聲望(這限制了我們只對自己的答案發表評論)。是的,大部分答案都是相同的,我剛纔發現了這個答案。對於那個很抱歉。我發現真正令人困惑的是,使用矩陣與1/3,與1,我的矩陣產生完全相同的效果,沒有不同的陰影,沒有不同的強度......所以實際值真的很重要的東西? – LopSae 2009-12-05 03:23:32

相關問題