- PR -

PictureBoxの描画範囲について

投稿者投稿内容
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2005-07-26 02:17
いつもお世話になっております。
C# のPictureBox についての質問です。

やりたいことは、PictureBox のサイズ以上の描画領域に
描かれた図形なり何なりを、PictureBox の描画位置をずらして
表示したいということです。

例をあげると
100 X 100 のPictureBox を配置したとします。
そこに、始点(100,100)、終点(200,200)でラインを引きます。
このラインを引いた部分に描画範囲をあわせて
PictureBox 内にぴったり表示させるというようなことは可能なのでしょうか?

若干わかりにくい文章ですいません。
ご教授よろしくお願い致します。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2005-07-26 09:25
表示倍率を変えたいのでしょうか?
・ClientSizeと表示内容から表示倍率を求める。
・表示倍率に応じて、座標計算して、内容の表示。

スクロールバーを出したい?
・panelを100x100にする。
・panel内に、pictureBoxをDockFullで配置。
・panelのAutoScrollをtrueにする。
・pictureBoxのサイズを適宜(200x200)変える。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2005-07-26 10:38
今日は

Pictureboxのサイズを変えずに、適当なImageをサイズ一杯に表示したいのなら
PictureboxのSizeModeをStretchImageとし、
new BitMap(w,h)でBitmapを作りそれに任意の作図し、
PictureboxのImageに設定すれば出来ます。
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2005-07-26 21:22
ご返答ありがとうございます。

cats さんの一つ目の案とrvmx さんの言われてる
拡大縮小をかけて、サイズ内に収めるというのも
入れたい機能ではあります。

ただ、一番の目的は、catsさんの2つ目の案のように
スクロールをさせることです。
そのときに、普通にスクロールバーでスクロールさせるのではなく
PitcureBox 内でマウスをクリックしながら左右に動かして
スクロールさせれればなかなかかっこいいなと思いまして。
そこで、第一歩として、描画範囲の始点と終点を手動でずらして
Box 内に収まってない部分を表示させようと思ったわけです。

これは実際のところ可能なのでしょうか?
よろしくお願いします。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2005-07-26 21:59
今日は

マウスのイベントで移動座標を取得すれば簡単に出来ますよ。
最初はmousedownで、その後はmousemoveでButtonが押されていることを確認し
移動座標を求め、Imageの表示位置へ反映。
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2005-07-26 22:40
さっそくのレスありがとうございます。

Bitmap を自前で作成し、そこにDrawLine でラインを引いて
PictureBox の Image に設定
というところまではやってみたのですが
Image の表示位置へ反映というのはどのようにすればよいのでしょうか?

最初の書き込みを例にあげると、
PictureBox のサイズが 100 X 100 で
Bitmap のサイズが 200 X 200 のところに、DrawLine で (100,100) から (200,200)
にラインを引き、ラインがちょうどPictureBox 内に収まるように
表示位置を合わせるってとこですね。

今は自宅でプログラム環境がないため何も試していないのですが
方法が浮かばないのでとりあえず再度質問させていただきました。
失礼をして申し訳ありません。

よろしくお願いします。



rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2005-07-27 04:54
今日は

DrawImageを使います、下記に例を示します。

Bitmap bm=new Bitmap(bmorg=元のImage);
Graphics g=Graphics.FromImage(bm);
g.DrawImage(bmorg,new Rectangle(0,0,pictureBox.Width,pictureBox.Height),100,100,100,100,System.Drawing.GraphicsUnit.Pixel);
g.Dispose();
pictureBox.Image=bm;
まかろに
常連さん
会議室デビュー日: 2005/06/17
投稿数: 41
投稿日時: 2005-07-27 10:00
なるほど。

早速試してみます。
結果はまた報告させてもらいます。
ありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)