TOP > カテゴリ > 画像処理工学 >

RGBカラー調整のサンプルコード

画像に「RGBカラー調整」の処理をするサンプルです。ソースコードはDelphi5で作成しましたがその他の言語でも流用できるかと思います。

画像処理の結果

RGBカラー調整をすると下図のようになります。(R+100,G+0,B+0)

ソースコード

[EffectBass.pas - 汎用モジュール]

//Bass Unit
unit EffectBass;

interface
uses
 Windows,SysUtils, Classes, Graphics;

type
 //24bitアクセス用ポインタ
 pRGBarray  = ^TRGBarray;
 TRGBarray  = array[0..0] of TRGBTriple; //None リテラル

type
 //24bitアクセス用ダブルポインタ
 PPBits = ^TPBits;
 TPBits = array[0..0] of pRGBarray; //None リテラル

//汎用プロシージャ
procedure Set24bit(Src,Dest :TBitmap);
function  Set255(Value : integer) : BYTE;

implementation


/////////
procedure Set24bit(Src,Dest :Tbitmap);
begin
  Src.PixelFormat :=pf24bit;
  Dest.PixelFormat:=pf24bit;
  Dest.Width:=Src.Width;
  Dest.Height:=Src.Height;
end;

/////////
function Set255(Value:Integer):Byte;
begin
 if Value>=255 then
  Result:=255
 else if Value<=0 then
 Result:=0
 else Result:=Value;
end;
end.

[RGBカラー調整の関数]

//-----------------------------------------------------------------------------
//■関数    EffectRGBColor_Adjustment
//■用途   RGBカラー調整
//■引数     hBMP  ... 転送元のビットマップのハンドル
//           R     ... 変更するRGB値(-255~255)
//           G    ... 変更するRGB値(-255~255)
//           B     ... 変更するRGB値(-255~255)
//■戻り値
//            新しいビットマップのハンドル
//-----------------------------------------------------------------------------
function EffectRGBColor_Adjustment(hBMP :HBitmap ;R,G,B : SmallInt):HBitmap;
var
  Row,Col : Integer;
  SrcRow,DestRow : pRGBArray;
  SrcBitmap,DestBitmap : TBitmap;
begin
  SrcBitmap   :=TBitmap.Create;
  DestBitmap  :=TBitmap.Create;
  SrcBitmap.Handle :=hBMP;
  Set24bit(SrcBitmap,DestBitmap);
  try
    for Row := 0 to SrcBitmap.Height - 1 do
    begin
       SrcRow  := SrcBitmap.Scanline[Row];
       DestRow := DestBitmap.Scanline[Row];
       for Col := 0 to SrcBitmap.Width - 1 do
       begin
         DestRow[Col].rgbtRed   := Set255(SrcRow[Col].rgbtRed   + R);
         DestRow[Col].rgbtGreen := Set255(SrcRow[Col].rgbtGreen + G);
         DestRow[Col].rgbtBlue  := Set255(SrcRow[Col].rgbtBlue  + B);
       end;
    end;

    Result:=DestBitmap.ReleaseHandle;
  except
    Result:=SrcBitmap.ReleaseHandle;
  end;

  SrcBitmap.Free;
  DestBitmap.free;
end;

[関数の呼び出し]

procedure TForm1.Button1Click(Sender: TObject);
begin
    Image1.Picture.Bitmap.Handle :=
      EffectRGBColor_Adjustment(Image1.Picture.Bitmap.ReleaseHandle,100,0,0);
end;





関連記事



公開日:2015年02月24日
記事NO:00296