ホームページ  >  記事  >  ウェブフロントエンド  >  Photoshop 画像の明るさ/コントラストの調整

Photoshop 画像の明るさ/コントラストの調整

高洛峰
高洛峰オリジナル
2017-02-18 13:55:173280ブラウズ

Photoshop画像の明るさ/コントラスト調整の原理を簡単に紹介します:

1. コントラストアルゴリズムの公式。

Photoshop は、指定された値の正と負の値に応じてコントラストの増加をそれぞれ処理します。

newRGB を使用して画像ピクセルの新しい R、G、B コンポーネントを表す場合、RGB は画像ピクセルの R、G、B コンポーネントを表し、Threshold は指定されたしきい値、Contrast はコントラストの増分です。コントラストが 0 より大きい場合:

1) newRGB = RGB + (RGB - しきい値) * (1 / (1 - コントラスト / 255) - 1)

ここで、コントラストが 255 に等しい場合 (RGB - しきい値) * (1 / (1 - コントラスト / 255) - 1) は無限大 (±) であるため、RGB の最大値と最小値はそれぞれ 255 と 0 であるため、newRGB は Threshold、つまり newRGB = RGB > によってのみ決定できます。 ;= しきい値? 255 : 0。これは実際には画像のしきい値を設定します。画像は最大 8 つの色、つまり赤、黄、緑、青、紫、黒、白で構成されます。グレースケール画像上の線。

コントラストが 0 未満の場合:

2) newRGB = RGB + (RGB - 閾値) * コントラスト / 255

このうち、コントラストが -255 に等しい場合、画像の各 RGB 成分は閾値に等しい、画像は完全に灰色です。グレースケール画像には、しきい値グレースケールである 1 本の線だけがあります。

2. 画像の明るさの調整。この記事では、最も一般的に使用される非線形の明るさ調整を使用します (この明るさ調整方法は Photoshop CS3 より前のバージョンでも使用され、CS3 以降のバージョンでもこの明るさ調整方法のオプションが保持されています)。

3. 画像の明るさ/コントラストの総合的な調整アルゴリズム。これは非常に簡単で、明るさとコントラストを同時に調整する場合、コントラストが 0 より大きい場合は明るさを調整し、コントラストが 0 より小さい場合はその逆を行います。最初にコントラストを調整し、次に明るさを調整します。

以下は、サンプル コードを含む、BCB2007 および GDI+ ビットマップ データを使用して記述された Photoshop 画像の明るさ/コントラスト調整のコードのすべてです:

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

// ARGB ピクセル構造を定義します
typedef Union
{
ARGB Color;
struct
バイト青;
バイト緑;
バイト赤; Alpha;
};
}ARGBQuad、*PARGBQuad;

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

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

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

VOID BrightAndContrast(BitmapData) *データ、INT ブライト、INT コントラスト、BYTE しきい値)
{
FLOAT cv = コントラスト<= -255? -1.0f: コントラスト / 255.0f;
if (コントラスト > 0 && コントラスト < 255)
cv = 1.0 f / (1.0f - cv) - 1.0f;

BYTE values[256];
for (INT i = 0; i < 256; i ++)
{
INT v = コントラスト > 0? CheckValue(i + bright) : i;
if (contrast >= 255)
v = v >= しきい値? 255 : 0;
else
v = CheckValue(v + (INT)((v - threshold) * cv + 0.5f));
value s[i] = コントラスト 0? CheckValue(v + bright) : v;
}

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

for (UINT y = 0; y < data->Height; y ++, (BYTE*)p += offset)
{
for (UINT x = 0; x <データ->幅; x ++, p ++)
{
p->青 =値[p->青];
p->緑 = 値[p->緑];
p ->赤 = 値[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, data);
}
//----------------- ---------------------------------------------------- --------- ---

// GDI+ ビットマップ スキャン ラインのロック解除
FORCEINLINE
VOID UnlockBitmap(Gdiplus::Bitmap *bmp, BitmapData *data)
{
bmp- >UnlockBits(データ)
}
//---------------------------- -------------- ----------------------------

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);

delete g;
bmp を削除;
}
// ------------------------------------ -------------- ------------------------

明るさ・コントラスト調整機能 BrightAndContrast では、まず、以前に紹介した原理に従って 256 要素サイズのルックアップ テーブルが作成され、画像データの R、G、B 成分値に従ってピクセルごとにルックアップ テーブル内の調整されたデータが取得されます。処理速度はかなり速いです。

Photoshop图像亮度/对比度调整



Photoshop 画像の明るさ/コントラスト調整関連記事の詳細については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。