>  기사  >  웹 프론트엔드  >  Photoshop 이미지 밝기/대비 조정

Photoshop 이미지 밝기/대비 조정

高洛峰
高洛峰원래의
2017-02-18 13:55:173279검색

포토샵 이미지 밝기/대비 조정 원리를 간략하게 소개합니다:

1. 대비 알고리즘 공식.

Photoshop은 주어진 값의 양수 값과 음수 값에 따라 대비 증가분을 각각 처리합니다.

newRGB를 사용하여 이미지 픽셀의 새로운 R, G, B 구성 요소를 나타내는 경우 RGB는 이미지 픽셀의 R, G, B 구성 요소를 나타내며 Threshold는 지정된 임계값이고 Contrast는 대비 증가분. 대비가 0보다 큰 경우:

1) newRGB = RGB + (RGB - 임계값) * (1 / (1 - 대비 / 255) - 1)

여기서 , Contrast가 255(RGB - Threshold ) * (1 / (1 - Contrast / 255) - 1)과 같을 때 RGB의 최대값과 최소값은 각각 255와 0이므로 newRGB는 무한대(±)가 됩니다. Threshold에 의해서만 결정됩니다. 즉, newRGB = RGB >= Threshold ? 255:0입니다. 이는 실제로 이미지 임계값을 설정하는 것입니다. 즉, 이미지는 빨간색, 노란색, 녹색, 청록색, 파란색 등 최대 8가지 색상으로 구성됩니다. 보라색, 검정색, 흰색 회색조 이미지에는 최대 8개의 선만 있습니다.

Contrast가 0보다 작은 경우:

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

그중 Contrast가 -255인 경우 , 이미지 RGB 각 구성 요소는 임계값과 동일하고 이미지는 완전히 회색이며 회색조 이미지에는 임계값 회색조인 단 하나의 선만 있습니다.

2. 이미지 밝기 조정. 이 문서에서는 가장 일반적으로 사용되는 비선형 밝기 조정을 사용합니다(이 밝기 조정 방법은 Photoshop CS3 이하 버전에서도 사용되며 CS3 이상 버전에서도 이 밝기 조정 방법 옵션이 유지됩니다).

3. 영상 밝기/대비 종합 조정 알고리즘. 이는 매우 간단합니다. 밝기와 대비를 동시에 조정할 때 대비가 0보다 크면 지금 밝기를 조정하고, 대비가 0보다 작으면 그 반대가 됩니다. 대비를 먼저 조정한 다음 밝기를 조정합니다.

다음은 예제 코드를 포함하여 BCB2007 및 GDI+ 비트맵 데이터를 사용하여 작성된 Photoshop 이미지 밝기/대비 조정을 위한 전체 코드입니다.

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

// ARGB 픽셀 구조 정의
typedef 공용체
{
ARGB Color;
struct
{
BYTE Blue;
BYTE Green;
BYTE Red;
BYTE Alpha;
};
}ARGBQuad, *PARGBQuad;
//------------ - ------------------------------------------------- - ----------


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

FORCEINLINE
INT CheckValue(INT 값)
{
    return 값 <= 00 : 값 >= 255255 : 값;
}
//---------------- ------------------------------------- ---------

VOID BrightAndContrast(BitmapData *data, INT bright, INT contrast, BYTE threshold)
{
    FLOAT cv = 대비 <= -255? -1.0f : 대비 / 255.0f;
    if (대비 >0 && 대비 < 255 )
        cv = 1.0f / (1.0f - cv) - 1.0f;

    BYTE 값[256];
     (INT i = 0; i < 256; i ++)
    {
        INT v = 대비 > 0? CheckValue(i + 밝음) : i;
        if (대비 >= 255)
           v = v >= 임계값? 255 : 0;
        else
            v = CheckValue(v + (INT)((v - 임계값) * cv +  0.5f));
        값[i] = 대비 < 0? CheckValue(v + 밝음) : v;
    }

    PARGBQuad p = (PARGBQuad)data->Scan0;
    INT offset = data->Stride - data->Width * sizeof(ARGBQuad);

    for (UINT y = 0; y < data->Height; y ++, (BYTE *)p += 오프셋)
    {
        for (UINT x = 0; x < data->Width; x ++, p ++)
        {
            p->파란색        = 값[p->파란색];
           p->녹색    = 값[p->녹색];
            p-& gt;빨간색        = 값 [p->빨간색];
        }
    }
}
//----------------------------------------- ------ ----------

// GDI+ 비트맵 스캔라인을 데이터에 잠금
FORCEINLINE
VOID LockBitmap(Gdiplus::Bitmap *bmp, BitmapData *data)
{
Gdiplus::Rect r(0, 0, bmp->GetWidth(), bmp->GetHeight());
bmp-> ;LockBits( &r, ImageLockModeRead | ImageLockModeWrite,
PixelFormat32bppARGB, 데이터);
}
//--------------- - ------------------------------------------------- - -------

// GDI+ 비트맵 스캔라인 잠금 해제
FORCEINLINE
VOID 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 ");
Gdiplus::Graphics *g = new Gdiplus::Graphics(Canvas->Handle);
g->DrawImage(bmp, 0, 0);

BitmapData 데이터;
LockBitmap(bmp, &data);
BrightAndContrast(&data, 0, 100, 121);
UnlockBitmap(bmp, &data);
g->DrawImage(bmp, data.Width, 0) ;

g 삭제;
bmp 삭제;
}
//---------------- ------------------------------------- ---------

밝기/대비 조정 기능인 BrightAndContrast에서는 앞서 소개한 원리에 따라 먼저 256개 요소의 룩업 테이블을 생성한 후 이미지 데이터를 처리한다. 조정된 데이터는 R, G, B 성분 값에 따라 룩업 테이블에서 얻어지므로 처리 속도가 상당히 빠릅니다.

Photoshop图像亮度/对比度调整



Photoshop 이미지 밝기/대비 조정 관련 기사를 더 보려면 PHP에 주목하세요. 중국사이트!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.