掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
BMP画像をグレイスケール化するには? (ID:11556)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
初めまして、Delphi挑戦者と申します。 現在Delphi7にて、BMP画像のグレイスケール化に挑戦しています。 過去ログなどを読んだのですが、あまり理解できず…新しくたずねさせていただきます。 現在、私がプログラムしたものは下記の通りです。 //ユーザー関数(ウランバイト)←下で使います。 Function TForm1.RoundByte(data:Double):Byte; begin if Data >= 255 then //バイトの範囲(0〜255)に値を丸め込む Data := 255; if Data <= 0 then Data := 0; RoundByte := Round(Data); end; procedure TForm1.Gray; var x,y : Smallint; //ビットマップのx軸、y軸 GrayBMP : TBitmap; //グレイ補正ビットマップ px1RGB : Longint; //ピクセル値(RGB型) R,G,B : Byte; //R値、G値、B値 begin CanselFlag := False; GrayBMP := TBitmap.Create; GrayBMP.Height := Form2.Image1.Height; GrayBMP.Width := Form2.Image1.Width; //プログレスバーの設定 ProgressBar1.Max := GrayBMP.Width; //最大値をビットマップの横幅に設定 ProgressBar1.Min := 0; //最小値を0に設定 ProgressBar1.Position := 0; //ポジションを0に設定 //Gray処理 for x:=0 to GrayBMP.Width do begin for y:=0 to GrayBMP.Height do begin //元画像からの値の抽出 px1RGB := ColorToRGB(Form2.Image1.Canvas.Pixels[x,y]); //3原色の分解 R := GetRValue(px1RGB); G := GetRValue(px1RGB); B := GetRValue(px1RGB); //グレースケール化 //Y = ( 0.298912 * R + 0.586611 * G + 0.114478 * B ) R := RoundByte(R*0.298912); G := RoundByte(G*0.586611); B := RoundByte(B*0.114478); //ビットマップ描写 GrayBMP.Canvas.Pixels[x,y] := RGB(R,G,B); end; //プログレスバー ProgressBar1.Position := x; end; ProgressBar1.Position := 0; //キャンセルフラグ if CanselFlag = False then Form2.ImageView(GrayBMP); GrayBMP.Free; end; 画像ファイルは BitMap.LoadFromFile(OpenDialog1.FileName); //ビットマップにファイルをロードする。 Form2.ImageView(BitMap); //「ImageView」手続きの呼び出し。 上記の方法で読み込んでいます。 現在グレースケール化としているところは動かしていません。 このプログラムのまま実行すると予測ですが、色の情報が失われて、ぱっと見はグレースケール化されたような形になっています。 グレースケール化の部分を動かすと、緑がかった画像になります。 NTSCでのグレースケールに挑戦したいのですが、どのような処理をすれば良いのかわかりません。 よろしくお願いしますm(__)m わかりにくい文章で、すみません。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.