画像の明暗を調整する



ここでは下記のように画像の明暗を調整します。

変換前 明るくする(Button1Click) 暗くする(Button2Click)


■使用するAPI関数

■使用するコンポーネント

■ソースは下記のようになります。追加している部分は青色です。

■初期設定
private
{ Private 宣言 }
procedure FuncConstract(hDC,lngWidth,lngHeight: integer; Count : Byte ; Light : Boolean );


■画像の明暗を調整する関数
//------------------------------------------------------
//■関数名 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;

■画像を明るくする
procedure TForm1.Button1Click(Sender: TObject);
begin
 FuncConstract(image1.canvas.handle,image1.width,image1.Height,10,True);
 Image1.Refresh;
end;

■画像を暗くする
procedure TForm1.Button2Click(Sender: TObject);
begin
 FuncConstract(image1.canvas.handle,image1.width,image1.Height,10,False);
 Image1.Refresh;
end;





Win32 APIのページへ



ホーム PV ランキング