ピクチャボックスのビットマップから自由な選択範囲でピクチャを切り抜くには?

解決


ペイント  2005-11-21 09:28:55  No: 128087

ペイントのようなグラフィックソフトを自作しています。

ピクチャボックス上を、マウスで自由にドラッグして、
囲んだ範囲を切り取りたいのですが、どんな方法があるでしょうか。

よろしくお願いいたします


ガッ  2005-11-21 09:31:58  No: 128088

貴方の言う「グラフィックソフト」内部で"画像"というものをどうやって表現しているのか分かりません。
また、貴方の環境も分かりません。
答えようがありません。


通ってみた  2005-11-21 09:57:50  No: 128089

ドラッグ開始時のピクチャーボックス上でのx、y座標から、ドラッグ終了時の同x、y座標でBitbltなりをしてやればいいのではないかと思われ

あとは試行錯誤の連続で解決するかと


ペイント  2005-11-21 10:05:25  No: 128090

お返事ありがとうございます。

Bitbltで、矩形以外も切り取れますでしょうか。
ぐにゃぐにゃに囲んだ領域など。

また通ってもらえますかぁ・・・


通ってみた  2005-11-21 10:35:45  No: 128091

もしやるとするならば、相当な根気が必要になると思われ

1:線で囲む
2:1と同じ線のものを別ピクチャーに白バック黒線で再現
3:2の線の中身を黒で塗りつぶす(要はマスクをつくる)
4:演算コピーでマスク部分を抜き出す
5:切るなり貼るなりの処理をする

つくったことがある訳ではないので具体的なことは言えませんが、頭で考えたところではこんな感じかと
マスクや演算コピーなどに関して知識がないのであれば、ゲームキャラクタを背景に重ねるような解説やサンプルを探して理解してください


中途半端  2005-11-21 18:36:33  No: 128092

>ピクチャボックス上を、マウスで自由にドラッグして、
>囲んだ範囲を切り取りたいのですが、どんな方法があるでしょうか。

切り取った痕跡を元のピクチャボックスに残すことが目的なのでしょうか。
または切り取った画像を別のピクチャボックスに貼り付けることが目的な
のでしょうか。
後者ならPaintPictureでできますが・・・。
ドラッグ時マウスを押した位置と離した位置のそれぞれのXYを記録しておい
てPaintPictureで貼付けては。PaintPictureはヘルプで使い方が載っていま
す。
また□で囲む様子をピクチャボックスで表現する場合は、
Me.Picture1.DrawMode = vbInvert を使うと、□を消すときに楽チンです
よ。

的外れでしたらゴメンナサイ。


名無し  2005-11-21 18:39:08  No: 128093

>中途半端氏

>ぐにゃぐにゃに囲んだ領域など。
だそうだが。


中途半端  2005-11-21 18:56:33  No: 128094

名無しさま。
>>ぐにゃぐにゃに囲んだ領域など。
>だそうだが。

到底私の手には負えません。退散しますので後はよろしく。
やっぱり中途半端です。

ペイントさま  ごめんなさい。


K.J.K.  2005-11-21 22:21:11  No: 128095

GDIベースでやるならば、(GDI下の)Regionについて調べてみては。
複雑な図形のRegionを作るのには、(GDI下の)Pathを使うとか。


ペイント  2005-11-22 08:25:38  No: 128096

みなさま、お返事ありがとうございます。

「通ってみた」さん

マスクの作り方のHPをいくつか見つけたので読んでいます。

「中途半端」さん

vbInvert、とても勉強になりました。役立ちそうです。

「K.J.K」さん

GDI、かなり検索してみました。目的のところには達して
いませんが、文字のグラフィックや、塗りつぶしのときなどに
使えそうな関数をたくさん知り、勉強になりました。

時間がかかりそうですが、必ずや、ぐにゃぐにゃ領域の切り取りを
達成して、報告したいと思います。
とりあえず、ピクチャに子ピクチャを乗せて、1ピクセルごとに
切り貼りしてやってみようと思っています。
あとは、みなさんのアドバイスを勉強して理解できたら、使って
みます。

とりまえず、明日も仕事なので、寝ます。興味なかったんですが、
やりだしたらハマってしまって、プログラムって時間あっというまですよね。

では。これ以上アドバイスをもらうと、調べることが多すぎて
脳みそが崩壊するので、とりまえず、解決にしておきます。
少しまとまったら、また質問しにきます。ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加