掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
色フィルター? (ID:23123)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
長いですが・・・ image1・2 と trackbar1・2 を置いてください。 ---------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Math, StdCtrls, ExtCtrls, ComCtrls; type TRGBTripleArray = array[0 .. High(Integer) div 3 - 1] of RGBTRIPLE; PRGBTripleArray = ^TRGBTripleArray; //配列型のポインタ TForm1 = class(TForm) Image1: TImage; Image2: TImage; TrackBar1: TTrackBar; TrackBar2: TTrackBar; procedure FormCreate(Sender: TObject); procedure TrackBar1Change(Sender: TObject); private { Private 宣言 } public function Med3(a : integer ; b : integer; c : integer) : integer; procedure getRGB( P :PRGBTripleArray; x: integer;var R :Short; var G :Short; var B :Short); procedure setRGB( P :PRGBTripleArray; x: integer; R ,G, B :Short); procedure SetColoFilter(); procedure RGB2YUV709( R,G,B :Short ;var Y :Short; var U :Short; var V :Short); procedure YUV2RGB709( Y,U,V :Short ;var R :Short; var G :Short; var B :Short); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.getRGB( P :PRGBTripleArray; x: integer;var R :Short; var G :Short; var B :Short); begin R := P[x].rgbtRed; G := P[x].rgbtGreen; B := P[x].rgbtBlue; end; procedure TForm1.setRGB( P :PRGBTripleArray; x: integer; R ,G, B :Short); begin P[x].rgbtRed := R ; P[x].rgbtGreen:= G ; P[x].rgbtBlue := B ; end; procedure TForm1.TrackBar1Change(Sender: TObject); begin SetColoFilter(); end; procedure TForm1.RGB2YUV709( R,G,B :Short ;var Y :Short; var U :Short; var V :Short); begin Y := Med3( 0,255,( 183*R +614*G + 62*B) div 1000); V := Med3(-128,127,(-101*R -339*G +439*B) div 1000); U := Med3(-128,127,( 439*R -399*G + 40*B) div 1000); end; procedure TForm1.YUV2RGB709( Y,U,V :Short ;var R :Short; var G :Short; var B :Short); begin Y := Y -16; R := Med3( 0,255,(1164*Y +1792*V) div 1000); G := Med3( 0,255,(1164*Y -213*U - 534*V) div 1000); B := Med3( 0,255,(1167*Y+2113*U ) div 1000); end; procedure TForm1.FormCreate(Sender: TObject); begin Image1.Picture.LoadFromFile('虫.bmp'); //適当にbmpのファイルをアサインすること Image2.Picture.LoadFromFile('虫.bmp'); //適当にbmpのファイルをアサインすること TrackBar1.Max := 128; TrackBar2.Max := 128; TrackBar1.Min := -128; TrackBar2.Min := -128; TrackBar1.Frequency := 16; TrackBar2.Frequency := 16; end; function TForm1.Med3(a : integer ; b : integer; c : integer) : integer; begin if (a>b) then begin if(c>a) then result := a else result := Max(b,c); end else begin if(c>b) then result := b else result := Max(a,c); end end; procedure TForm1.SetColoFilter(); var Ps0,Ps1: PRGBTripleArray; BMP : TBitMap; x,y :Integer; R0,G0,B0 :Short; R1,G1,B1 :Short; Y0,U0,V0 :Short; U1,V1 :Short; begin BMP := TBitMap.Create; BMP.PixelFormat := pf24bit; BMP.Width := Form1.Image1.Picture.Bitmap.Width ; BMP.Height := Form1.Image1.Picture.Bitmap.Height; //処理 for y := 0 to Form1.Image1.Picture.Bitmap.Height-1 do begin Ps0 := Form1.Image1.Picture.Bitmap.ScanLine[y]; Ps1 := BMP.ScanLine[y]; for x := 0 to Form1.Image1.Picture.Bitmap.Width -1 do begin getRGB( Ps0, x, R0,G0,B0); RGB2YUV709(R0,G0,B0, Y0,U0,V0); U1 := TrackBar1.Position; V1 := TrackBar2.Position; YUV2RGB709(Y0,U1,V1,R1,G1,B1); setRGB(Ps1, x ,R1,G1,B1); end; end; Image2.Picture.Bitmap.Assign(BMP); Ps1 := BMP.ScanLine[0]; getRGB(Ps1, 0 , R0,G0,B0); BMP.free; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.