画像処理で、下書きの画像を指定しておき、その上に文字等を書き込めるよう
に処理していますが、下書きの画像と描画した画像の重ねあわせで問題があり
ます。
1.TImageコンポーネントを2枚重ね、下側のコンポーネントに下書き画像を
読み込ませておき、上側のコンポーネントを透過にしておき描画する。
→書込みの度に画像がチラつく。
2.描画は隠れたImageコンポーネントにしておき、表示するタイミングで表示
用のImageコンポーネントに下書きを書き、その上に描画した画像を重ねる。
with 表示用Image.Canvas do
begin
CopyMode := cmSrcCopy;
StretchDraw(Rect,下書き画像);
CopyMode := cmSrcAnd;
CopyRect(Rect,描画した画像,Rect);
end;
→画像を重ねる際、"cmSrcAnd"では重なる部分の色がマージされ、描画したま
まの色が再現されない。下書きが黒い箇所では書き込んだ画像が全く反映され
ない。
3.背景の書込みまでは「2」と同じで、重ね合わせる画像のピクセルをループで
走査し色があれば表示用のImageコンポーネントに書き込む。
→MouseMoveのイベントで描画している為、その都度ループの処理が実行され
ると時間がかかり、マウスの動きについて来れず、見た目がカクカクする。
(400×300Pixの為、都度120000回ループする。)
4.下書き画像をImageコンポーネントに読み込んでおき、そのまま描画する
→消しゴム機能を使うと、下書きの画像まで消えてしまう。
長々と書き込んでしまいましたが、自分で試したパターンは上記の4通りです。
レイヤー機能を上手く実現するには何か方法がありますでしょうか?
以下のような処理はどうでしょうか?
上側の画像は黒地に絵があるとします。
上側の画像のマスクイメージ(白地に黒)を作成します。
下側の画像にマスクイメージをANDで描画します。
すると、絵になるべき部分のみが黒くなります。
次に、上側の画像をORで描画します。
deldelさんありがとうございます。
deldelさんのレスを見る前にScanLineメソッドを使って自己解決しました。
お手数をお掛けしました。
ツイート | ![]() |