//------------------------------------------------------
//■関数名 FuncConstract
//■用途 画像の明暗を調整する
//■引数
// hDC デバイスコンテキストのハンドル
// lngWidth デバイスコンテキストの横幅
// lngHeight デバイスコンテキストの縦幅
// Count 変換する値(0-255)
// Light 明るくする(True)暗くする(False)
//------------------------------------------------------
procedure TForm1.FuncConstract(hDC,lngWidth,lngHeight: integer;Count
: Byte ; Light : Boolean );
{輝度を変換する}
function LightMode(Color : integer ; Count: Byte; GraphicUP :Boolean
):integer;
Var
R,G,B : Double;
begin
R := GetRValue(Color);
G := GetGValue(Color);
B := GetBValue(Color);
If GraphicUP Then
begin
// 輝度を高める場合
R := R + Count;
G:= G + Count;
B := B + Count;
end
else
begin
// 輝度を低める場合
R := R - Count;
G := G - Count;
B := B - Count;
end;
// R、G、B値が0〜255の範囲になるようにする
If R >= 255 Then R := 255
else
if R <= 0 Then R := 0 ;
If G >= 255 Then G := 255
else
If G <= 0 Then G := 0 ;
If B >= 255 Then B := 255
else
If B <= 0 Then B := 0 ;
Result := RGB(Trunc(R), Trunc(G), Trunc(B));
end;
Var
X,Y : integer;
hMDCBMP,hNewBMP,hOldBMP : integer;
begin
//メモリビットマップを作成
hMDCBMP := CreateCompatibleDC(hDC);
hNewBMP := CreateCompatibleBitmap(hDC, lngWidth, lngHeight);
hOldBMP := SelectObject(hMDCBMP, hNewBMP);
BitBlt(hMDCBMP, 0, 0, lngWidth, lngHeight,hDC, 0, 0, SRCCOPY );
For Y := 0 To lngHeight - 1 do
begin
For X := 0 To lngWidth - 1 do
begin
If Light Then
//輝度を高める
SetPixelV(hMDCBMP, X, Y,LightMode(GetPixel(hMDCBMP, X, Y),Count,True))
else
//輝度を低める
SetPixelV(hMDCBMP, X, Y, LightMode(GetPixel(hMDCBMP, X, Y),Count,False));
end;
end;
//デバイスコンテキストに転送
BitBlt(hDC, 0, 0, lngWidth, lngHeight,hMDCBMP, 0, 0, SRCCOPY);
//解放
SelectObject(hMDCBMP, hOldBMP);
DeleteDC(hMDCBMP);
DeleteObject(hNewBMP);
end; |