2016-08-12 90 views
0

我試圖自動調整圖像。我的代碼如下所示:AutoLevel(Channels.RGB)似乎沒有效果

MagickImage image = new MagickImage(stream); 
image.AutoLevel(Channels.RGB); 

後來在代碼中,我將圖像發送給Web響應。 由於某些原因,此代碼對圖像沒有影響。它看起來和原來的完全一樣。如果我更改爲:

MagickImage image = new MagickImage(stream); 
image.Posterize(2); 

然後我清楚地看到應用了過濾器。

我失去了什麼AutoLevel?

更新:

我嘗試這樣做的代碼:

var image1 = Image.Clone(); 
Image.AutoLevel(Channels.RGB); 
var diff = Image.Compare(image1, ErrorMetric.RootMeanSquared); 

和DIFF的值是0.0,而與此代碼(和使用相同的圖像):

var image1 = Image.Clone(); 
Image.Equalize(); 
var diff = Image.Compare(image1, ErrorMetric.RootMeanSquared); 

diff的值是0.315

+0

只是爲了澄清,無論我使用哪張照片,diff的值爲0.0 – Juvaly

回答

0

效果根據您的輸入圖像,AutoLevel可能不明顯。我用下面的代碼做了一個快速測試:

using (MagickImage imageA = new MagickImage("logo:")) 
{ 
    imageA.Write(@"c:\imageA.jpg") 

    imageA.AutoLevel(Channels.Default); 

    using (MagickImage imageB = new MagickImage("logo:")) 
    { 
    double difference = imageA.Compare(imageB, ErrorMetric.RootMeanSquared); 
    Assert.AreNotEqual(0.0, difference); 

    imageB.Write(@"c:\imageB.jpg") 
    } 
} 

這個測試通過了,但差值非常小。這意味着當你將圖像與你的眼睛進行比較時,你可能無法找到很大的區別。

下面是一個示例,它會告訴您AutoLevel方法在使用其他輸入圖像時會執行某些操作。

using (MagickImage imageA = new MagickImage("gradient:gray70-gray30", 150, 100)) 
{ 
    imageA.Write(@"c:\imageA.jpg") 

    imageA.AutoLevel(Channels.Default); 

    using (MagickImage imageB = new MagickImage("gradient:gray70-gray30", 150, 100)) 
    { 
    double difference = imageA.Compare(imageB, ErrorMetric.RootMeanSquared); 
    Assert.AreNotEqual(0.0, difference); 

    imageB.Write(@"c:\imageB.jpg") 
    } 
} 
相關問題