2012-06-11 125 views
3

我試圖將對比度和亮度應用於內存中的位圖,並且完全丟失。目前我正在嘗試使用Magick ++來做到這一點,但如果其他API中的其中一個能夠更好地發揮作用,我就會全神貫注。我設法找到Magick :: Image :: sigmoidalContrast()來應用對比度,但我無法弄清楚如何讓它工作。我創建一個圖像,傳遞緩衝區指針,然後調用該函數,但它似乎並沒有改變任何東西,所以我的第一個雖然是它正在複製和修改它。即便如此,我也不知道如何從Magick :: Image對象中獲取數據。使用ImageMagick ++修改圖像對比度/亮度

這是我到目前爲止。

Magick::Image image(fBitmapData->mGetTextureWidth(), fBitmapData->mGetTextureHeight(), "RGBA", MagickCore::CharPixel, pixels); 
image.sigmoidalContrast(1, 20.0); 

的文檔是無用的,搜索我只能找到線索,第一個參數實際上是一個布爾值,即使它需要爲size_t,指定是否增加或減少對比度,和第二個值後我不知道要傳遞什麼,所以我只用20.0來測試。

因此,有誰知道這是否可用於對比,如果沒有,那麼您如何應用對比度?同樣,我仍然不知道如何應用亮度,也無法找到任何看起來可以工作的功能。

回答

5

想通了很長的路要走;我使用的對比度功能是正確的,對於亮度,我最終使用了image.modulate(brightness, 100.0, 100.0);。爲了讓數據從圖像對象,你可以通過做

const MagickCore::PixelPacket * magickPixels = image.getConstPixels(0, 0, image.columns(), image.rows()); 

抓取整個圖像的像素,然後將magickPixels的數據複製回是被傳遞到圖像構造原來pixels。一個重要的事情要注意的是,會員MagickCore::PixelPacket::opacity不是你想象的那樣。如果像素是完全透明的,你會認爲這個值是0,對吧? ImageMagick出於某種原因正好相反。因此,對於完全透明度,值將爲255.這意味着您需要執行255 - opacity以獲取正確的值。

還要注意ImageMagick編譯時使用的MAGICKCORE_QUANTUM_DEPTH,因爲這會大大改變這些值。對於我的代碼MAGICKCORE_QUANTUM_DEPTH恰好被定義爲16,所以所有的值都是從0到65535的範圍,我剛剛通過做將數據複製回去,因爲紋理數據是unsigned char值。

只是澄清如何使用這些函數,因爲文檔是可怕的,完全錯誤的,signmoidalContrast()的第一個參數實際上是一個布爾值,即使類型是size_t,它指定是否增加對比度(true )或減少它(假),第二個是從0.00001到20.0的範圍。我說0.00001是因爲0.0是一個無效值,所以它只需要一些十進制,接近但不是0.0。

對於modulate()該文件說,每個值應該被指定爲1.0,因爲沒有改變,這是完全錯誤的。這些值實際上是一個百分比,因此如果沒有變化,您將指定100.0。

我希望能幫助某人,因爲它讓我把所有這一天的事情都弄清楚了。

+0

我想知道爲什麼我的圖像變黑了。這就解釋了! –

0

根據Imagemagick網站 - 對於命令行,但可能是相同的?

-sigmoidal對比度contrastxmid點

增加不飽和光或陰影的對比度。

使用S形傳遞函數增加圖像的對比度而不會使高光或陰影飽和。對比度表示增加對比度有多少。例如,0附近沒有,3是典型的,20是很多。請注意,完全爲零是無效的,但0.0001與對比度的不變無關。中點表示中間色在合成圖像中下落的位置(0是白色,50%是中灰色,100%是黑色)。默認情況下,圖像對比度增加,使用+ S形對比降低對比度。

要實現等效的S形亮度變化,請使用-sigmoidal-contrast亮度x0%來增加亮度,class =「arg」> + S形對比度亮度x0%以降低亮度。

在命令行中有一個新的亮度對比度設置,可能在更高版本的magiC++中?

-brightness對比度亮度{xcontrast} {%}}

調整亮度和/或圖像的對比度。

亮度和對比度值將更改應用於輸入圖像。他們不是絕對的設置。亮度或對比度值爲零意味着沒有變化。值的範圍是-100到+100。正值會增加亮度或對比度,負值會降低亮度或對比度。要僅控制對比度,請將亮度設置爲0。要僅控制亮度,請將對比度設置爲0或僅將其關閉。

您也可以使用-channel來控制應用亮度和/或對比度變化的通道。默認是將相同的轉換應用於所有通道。

亮度和對比度參數轉換爲線性變換的偏移和斜率,並使用函數多項式「斜率,偏移」應用。

斜率在對比度= -100時從0變化到在對比度= + 100時幾乎垂直。對於亮度= 0和對比度= -100,結果完全中等。對於亮度= 0和對比度= + 100,結果將接近但在中等灰度下未達到閾值;那就是線性變換是中灰色的非常陡的垂直線。

使用此功能,負斜率即無效圖像不可能。所有可實現的斜率都爲零或正數。

偏移量從亮度= -100時的-0.5變爲亮度= 0時的0,亮度= + 100時變爲+0.5。因此,當對比度= 0且亮度= 100時,結果是完全白色的。類似地,當對比度= 0和亮度= -100時,結果是全黑的。

由於參數值的範圍是-100到+100,所以添加'%'符號與將它關閉並無區別。

如果magick ++就像Imagick可能落後於ImageMagick的選項

+0

這真的沒有什麼幫助... – Shenjoku

相關問題