首頁 >web前端 >PS教程 >Photoshop影像亮度/對比度調整

Photoshop影像亮度/對比度調整

高洛峰
高洛峰原創
2017-02-18 13:55:173414瀏覽

    簡單介紹一下Photoshop影像亮度/對比調整的原理:

    一、對比演算法公式。

    Photoshop對於對比度增量,是按給定值的正負分別處理的。

    若以newRGB表示影像像素新的R、G、B分量,RGB表示影像像素R、G、B分量,Threshold為給定的閥值,Contrast為對比度增量,當Contrast大於0時:

1) newRGB = RGB + (RGB - Threshold) * (1 / (1 - Contrast / 255) - 1)

    其中,當Contrast等於255時(RGB - Threshold) * (1 / (1 - Contrast / 2555) - 1)為無限(±),由於RGB最大最小值分別為255和0,因此,只能按Threshold來確定newRGB,即newRGB = RGB >= Threshold? 255 : 0,這實際上就是設定影像閥值,影像由最多八種顏色組成,分別為紅、黃、綠、青、藍、紫及黑與白,在灰階圖上也只有最多8條線。

    當Contrast小於0時:

        2) newRGB = RGB + (RGB - Threshold) * Contrast / 255

 灰階圖上只有1條線,即閥值灰階。

    二、影像亮度調整。本文採用的是最常用的非線性亮度調整(Phoposhop CS3以下版本也是這種亮度調整方式,CS3以上版本也保留了此亮度調整方式的選項)。

    三、影像亮度/對比綜合調整演算法。這個很簡單,當亮度、對比同時調整時,如果對比度大於0,現調整亮度,再調整對比度;當對比度小於0時,則相反,先調整對比度,再調整亮度。

    以下是使用BCB2007和GDI+點陣圖資料寫的Photoshop影像亮度/對比調整全部程式碼,包含範例程式碼:

//----------------- -------------------------------------------------- --------

// 定義ARGB像素結構
typedef union
{
            BYTE Blue;
        BYTE Green;        BYTE Red;         BYTE Alpha;
    };
}ARGBQuad, *PARGBQuad;

//

------------------------------ ---------------------------------------------

 

//-------------------------------------------- ------------ -------------------------------

FORCEINLINE
INT CheckValue(INT value)
{
    return值0? 0 : 值 >= 255255 : 值;
}
//---------------------------------- -------------- ------------------------------------ -----------------

VOID BrightAndContrast(BitmapData *資料、INT 亮度、INT 對比、BYTE 門檻)
{
    FLOAT cv = 對比度     FLOAT cv = 對比 ? -1.0f : 對比 / 255.0f;
    if (對比 >  cv = 1.0f  / (1.0f - 履歷) - 
1.0f ;    BYTE 值[256];    
for
 (INT i {        INT v = 對比> 0
? CheckValue(i + bright) : i;        if (對比 >=      255 : 
0
;        else
         + 0.5f));        值s[i] = 對比0 ? CheckValue(v + bright) : v;    }    PARGBQuad p = (PARGBQuad)data->Scan0;
(ARGBQuad);
for  (UINT y = 0
; y 高度; y ++, (BYTE*)p += 偏移)   0
; x 寬度;  x ++, p ++)
        {
            p-  p->綠色    = 值[p->綠色];
            p ->紅色         值[p ->紅色];        }    }
}
//--------------------------------------------- ------------------------------

// 鎖定GDI+位位圖掃描線到data
FORCEINLINE
VOID LockBitmap(Gdiplus::Bitmap *bmp, BitmapData *data)
{
    Gdiplus::Rect h )); bmp->LockBits(&r, ImageLockModeRead | ImageLockModeWrite,        PixelFormat32bppARGB, data);----------------/
/
--------------------------------------------------

//
 GDI+位圖掃描線解鎖
FORCEINLINEVOID UnlockBitmap(Gdiplus::Bitmap *bmp, BitmapData *data){    bmp->UnlockBits(data);
}

/ /

----------------------------------------------- ----------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    Gdiplus ::Bitmap *bmp =  
new Gdiplus::Bitmap(L"

d:\source.jpg"::); Handle);    g->DrawImage(bmp, 00);
    Bitmap data;Andcophip 美元 它(&data, 0
100121) ;    UnlockBitmap(bmp, &data);
    g->DrawImage(bmp, data.Width, 


//------- -------------------------------------------------- ------------------    在亮度/對比度調整函數BrightAndContrast中,首先按前面介紹的原理製造了一個256個元素大小的查找表,然後對圖像資料逐像素按R、G、B分量值在查找表中取得調整後的數據,因此處理速度相當快。






更多Photoshop影像亮度/對比調整 相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn