コントラスト補正を行う関数です。補正値は-100から100の範囲とします。元ネタはAKさんのホームページにありますので、アルゴリズムなどについてはそちらを参照してください。
AK's Laboratory
で、ここではテーブルを作成して高速に動作する関数を作成しました。コードに対する説明も必要ないと思うので今回はここまで(^^;
procedure Contrast(Bitmap: TBitmap; Value: Integer);
//コントラスト補正
var
I, J: Integer;
xValue: Double;
Table: TByteTable;
begin
if (Value = 0) or (Value > 100) or (Value < -100) then Exit;
{ 変換テーブルの作成 }
xValue := Value / 100;
for I := 0 to 255 do
begin
J := Round(I + xValue * (I - 127.5));
if J > 255 then J := 255 else if J < 0 then J := 0;
Table[I] := J;
end;
{ ピクセルの変換処理 }
StdTableFilter(Bitmap, Table);
if Assigned(Bitmap.OnChange) then
Bitmap.OnChange(Bitmap);
end;
|