塗りつぶしについて 2

解決


ミナミ  2006-09-25 23:51:40  No: 23370  IP: 192.*.*.*

先日『塗りつぶしについて』質問したものです。
多角形の塗りつぶしはおかげさまで簡単に行えるようになりました。
しかし、問題が生じました。
図形の拡大によるクリッピング処理です。
線分のクリッピング処理はできるのですが、塗りつぶしのクリッピング処理になると、単に線分のように処理するだけではうまくいきません。。。
どなたか、ご教授願います。

編集 削除
orz  2006-09-26 08:24:46  No: 23371  IP: 192.*.*.*

描画範囲が決まっていて、それ以外に描画したくないなら、リージョンを使う。

クリッピング(Cの解説&サンプル)
http://wisdom.sakura.ne.jp/system/winapi/win32/win134.html

Delphiのは、適当なのがみつからなかったので、コレ
不定形リージョンコンポーネント
http://www.vector.co.jp/soft/win95/prog/se082336.html

編集 削除
うんと  2006-09-26 09:55:52  No: 23372  IP: 192.*.*.*

質問の意味がとれないのですが、クリッピングなら Canvas にリージョンを
設定するだけで、あとは自動的に行われます。前回の Mr.XRAY さんの回答
を読むと解決です。

編集 削除
うんと  2006-09-26 09:55:52  No: 23373  IP: 192.*.*.*

質問の意味がとれないのですが、クリッピングなら Canvas にリージョンを
設定するだけで、あとは自動的に行われます。前回の Mr.XRAY さんの回答
を読むと解決です。

編集 削除
ミナミ  2006-09-26 11:17:31  No: 23374  IP: 192.*.*.*

orzさま、うんとさま、
アドバイスありがとうございます。
不定形リージョンコンポーネントを今ダウンロードしたところです。

塗りつぶし関数Canvas.Polygonを利用することを前提に考えていました。
いろいろネットで検索してみたところ参考になるものがありました。

http://www2.starcat.ne.jp/~fussy/algo/algo6-1.htm
http://www2.starcat.ne.jp/~fussy/algo/algo6-2.htm
ところが私にはポインタの知識もなくこれをDelphiに変換する技量がありません。
話はずれてしまうのですが、ポインタの部分をどのようにすればいいのでしょうか?

まずは、不定形リージョンコンポーネント使ってみます。

編集 削除
junki  2006-09-26 11:26:54  No: 23375  IP: 192.*.*.*

不定形リージョンは、今回のクリッピングの問題とは関係ないと思いますが。

編集 削除
ミナミ  2006-09-26 11:49:37  No: 23376  IP: 192.*.*.*

不定形リージョンコンポーネントのソースをみましたが、
参考にはなりませんでした。
なぜなら、現在描画されているcanvasの色を判定して塗りつぶすか?を判断しているからです。
やはりこちらの方法で処理したいと思います。

http://www2.starcat.ne.jp/~fussy/algo/algo6-1.htm
http://www2.starcat.ne.jp/~fussy/algo/algo6-2.htm
>ところが私にはポインタの知識もなくこれをDelphiに変換する技量がありません。
>話はずれてしまうのですが、ポインタの部分をどのようにすればいいのでしょうか?
ポインタ部分をどのようにDlphiソースに変えればよいのでしょうか?
よろしくお願いします。

編集 削除
orz  2006-09-26 13:06:36  No: 23377  IP: 192.*.*.*

うんと 2006/09/26(火) 09:55:52 
> 前回の Mr.XRAY さんの回答を読むと解決です。

なんだ、前回の質問にあったのね
https://www.petitmonte.com/bbs/answers?question_id=4240

> リージョン、パスの例
http://homepage2.nifty.com/Mr_XRAY/Halbow/VCL01.html

ちなみに不定形リージョンコンポーネントは、Delphiでの記述方法の
参考程度に紹介しただけで、それを使いなさいという意味ではありません。
あしからず・・・。
Mr.XRAY さんの回答(上記URL)があれば、コンポーネントなんていらないでしょう。

なお、リージョンを設定できれば、必要範囲以上塗りつぶしても、
リージョンの範囲外は塗りつぶされません。

編集 削除
ミナミ  2006-09-26 14:18:16  No: 23378  IP: 192.*.*.*

orzさま
ありがとうございます。
まだリージョンをためしていないのですが、
canvasが認識しうる範囲内の座標値データを渡すとは限らないのですが、この場合でもリージョンの設定だけで塗りつぶしがうまく行えるのでしょうか?

編集 削除
どーも  2006-09-26 15:34:28  No: 23379  IP: 192.*.*.*

ミナミさんがクリッピングといってるのはどのような意味ですか?

リージョンで設定できるのは、Canvas の一部分(矩形とは限らない)だけを
描画可能にする、という意味です。外側は描画されません。

編集 削除
ミナミ  2006-09-26 17:13:43  No: 23380  IP: 192.*.*.*

どーもさま、ありがとうございます。
>ミナミさんがクリッピングといってるのはどのような意味ですか?
描画範囲におさまるように座標を求めること?です。

リージョンに対する描画であっても、仮に線を描画したい場合はMoveTo,LineTo関数を使うと思います。そのMoveTo,LineTo関数で引数にcanvasが認識しない値を指定した場合不都合がおこります。

編集 削除
junki  2006-09-26 17:33:35  No: 23381  IP: 192.*.*.*

ここが参考になるかも

TCanvas のスケーリング

http://blog.livedoor.jp/junki560/archives/17584026.html
http://blog.livedoor.jp/junki560/archives/17632657.html
http://blog.livedoor.jp/junki560/archives/17721276.html

編集 削除
ミナミ  2006-09-26 20:17:58  No: 23382  IP: 192.*.*.*

リージョン雛形も描画canvasにクリッピングさせるには?
と書けば良かったかもしれません。
どうにか解決しました。
canvasからはみ出る点をcanvasの端に移動させるような方法で対処できました。
みなさん、ありかとうございました。

編集 削除