ホーム > カテゴリ > 画像処理工学 >

セピアカラーのサンプルコード(画像フィルター)

画像をセピアカラーに変換するサンプルです。ソースコードはDelphi5で作成しましたがその他の言語でも流用できるかと思います。

画像処理の結果

セピアカラーの処理を行うと下図のようになります。

ソースコード

[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.

[セピアカラーの関数]

//------------------------------------------------------------------------------
// ■関数名    EffectSepia
// ■用途      セピアカラー
// ■引数
//             hBMP             ...処理対象ビットマップのハンドル
//■戻り値 
//             ビットマップのハンドル
// -----------------------------------------------------------------------------
function EffectSepia(hBMP :HBitmap):HBitmap;
var
  Row,Col        : Integer;
  SrcRow,DestRow : pRGBArray;
  RGBColor       : BYTE;
  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
      //NTSC系加重平均法を用いてグレースケール化
      RGBColor:=Set255(
                  (Round(SrcRow[Col].rgbtRed   *0.289+
                         SrcRow[Col].rgbtGreen *0.586+
                         SrcRow[Col].rgbtBlue  *0.114 )));

      // 色のバランスを調整する
      DestRow[Col].rgbtBlue :=Set255(RGBColor - 20);
      DestRow[Col].rgbtGreen:=RGBColor;
      DestRow[Col].rgbtRed  :=Set255(RGBColor + 30);
    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:= 関数名(Image1.Picture.Bitmap.ReleaseHandle);
  end;




関連記事



公開日:2015年02月18日 最終更新日:2015年02月24日
記事NO:00224


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律