自分で使うちょっとしたペイントソフトを作りたいのですが、できればレイヤー機能を付けたい。基本的な方法を教えてほしいのですが。結構難しいですか?
>結構むずかしいですか?
答えようが無いのでは・・・。
あなたの環境やどの程度のスキルなのかによるかと・・・。
1枚のレイヤーの描画ツール=ペイントです。
あとは、複数のレイヤーそれぞれをどの位置にするかという機能(必要であれば、レイヤーの透過率・拡大縮小などの機能)があればよいかと思います。
保存形式は通常のBitmap1枚では無理ですね。独自形式にしたほうがよいかと。
レイヤー機能付きのペイントツールをいろいろ使ってみて、実装方法を類推してみてください。
レイヤー機能はありませんが、
こんなのが紹介されています。
参考にどうぞ。
落書き帳
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/beginner/cook_scribble.htm
単純にペイントを重ねれば出来るというものではないんですね。まず1枚の絵に1枚のレイヤーをつけ、それをまとめて1枚の画像として保存する方法のヒントがわかるとうれしいです。単純なペイントのみのツールは出来ます。del8使っています。
>単純にペイントを重ねれば出来るというものではないんですね。
単純にペイントを重ねれば出来るというものなんです。
レイヤーだろうと、メインだろうとすべてはビットマップデータ
使い方で名前が変わってる。そのようなイメージでいいんじゃない?
3つのビットマップ(元画像、レイヤー用画像、表示用画像)を作って
表示用画像に元画像をコピーして、その上にレイヤー用画像を
CopyMode に従ってコピーする。
半透明のような場合はScanLine を使って計算していく
簡単に作るならこの程度でよいのでは?
もちろん表示用にTPaintBoxではなくTImageを使えばそのまま
1枚の画像になってるのでそのまま SaveToFile すればいいし・・
なるほど。どれも形が変わっても同じ画像なんですね。だけど、実際に描画をしているときに元画像は背景としてレイヤーの裏側に常に表示されているものなんですかね?描画している途中に元画像にまで影響は出ないものなのでしょうか?今ひとつ、イメージが出来ません。もしよければ、プログラムでそのイメージを教えてもらえるとわかるかも。
レイヤーって、簡単に言えばスプライトですよね?
DirectXのスプライト機能を使うと早いと思います。
スプライトごとにレイヤ番号を持っておいて、レイヤ切り替え時にそのレイヤだけ表示するようにすれば解決すると思います。
これは新しい展開。DirectXはあまり判らないのでもう少し詳しく教えてもらえますか?説明があるサイトがあれば教えてください。
DelphiXで検索してみてください
レイヤー機能をもつペイントソフトは多いですよね。DirectX とは関係なく。
わたしだったら、Trasparent := true にした TBitmap 1枚を1枚のレイヤー
としますけど。コード次第ですよね。ドロー系ならメタファイルをレイヤーに
するのが自然でしょうけど、ペイント系なら Windows ではビットマップで
レイヤにするのが自然だと思いますが。
ペイントソフトが作れるならレイヤを導入するのは、たんに複数のビットマップに
画像を保持するだけのような気がします。
ツイート | ![]() |