画像のトリミングのプログラムの作成方法 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 かれん  (高校生) 投稿日時 2020/10/29 12:48:40
るきおさん、魔界の仮面弁士さん、早速のご回答本当にありがとうございます。
るきおさんのおっしゃる通り現在Windowsフォームアプリケーションで作成しております。
画像の表示はImageプロパティを使って表示していたためにpaintイベントに切り替えようと思います。るきおさんにおっしゃっていただいたイベントやプロパティ、魔界の仮面弁士さんが添付していただいたコードを参考にしてアプリを作成してみようと思います。

ただ、今週末まで中間試験の最中なのでそれが終わり次第作成して、また何かあればこちらにて質問させていただきたいと思います。その際はまたどうぞよろしくお願いいたします、、。

かれん
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/10/29 09:25:00
> こちらについてどのような関数を使えばよいか教えていただきたいです。

手前味噌ですが、実際に画像を切り出すサンプルを掲載しておきます。
「TextBox で指定したサイズ」ではなく、「マウスでドラッグした領域」を
切り出すコードなので、その点は手直しは必要になると思いますが、参考までに。
http://www.vb-user.net/junk/replySamples/2010.02.08.14.53/Clipping.txt


なお、使うべきクラスやメソッドの例は、るきおさんが既に答えられているので、
知りたいの手順や関数等だけであって、具体的なコードを知りたいわけでは無いという
場合には、本投稿を無視してください。(^^;
投稿者 るきお  (社会人) 投稿日時 2020/10/29 08:27:58
使用されているのは Windowsフォームアプリケーションでしょうか?
アプリケーションの種類により実現方法は大きく変わります。

ひとまずWindowsフォームアプリケーションという前提で考えて見ます。

Windowsフォームアプリケーションで、かれんさんが考えられているような自由な描画を行うには、Paintイベントを使用します。
PictureBoxを1つ配置してそれのPaintイベントを使用すると良いでしょう。

おそらく現時点で画像(写真)を表示する部分はできているのではないかと思います。
単純に画像を表示するプログラムはPictureBoxのImageプロパティやBackgroundImageプロパティを使って実現することが多いですが、これだと今回かれんさんが考えられているような柔軟な描画はできないので、もし、この方法で画像を表示しているのならばPaintイベントを使って表示するように置き換えてください。

Paintイベント内で e.Graphics.DrawImage を使うと画像を描画できます。
Paintイベントないでは e.Graphics.DrawRectangleを使うと四角形を描画することもできるので、マウスが示す座標を指定するとマウスでなぞった位置に四角形を描画することも可能です。

マウスの座標は MouseMoveイベントや、Control.MousePositionプロパティで取得できます。

Paintイベントは描画が必要なタイミングで自動的に発生しますが、自分で呼び出したいときは PictureBox1.Invalidate を使います。

e.Graphicsにはこのほかにもいろいろな機能があり、単純な画像処理やちょっとしたゲームを作れるくらいのグラフィックスの制御が可能です。
投稿者 かれん  (高校生) 投稿日時 2020/10/28 22:39:38
現在高校2年生です。学校の授業にてプログラミングをしていてそれに伴ってvisualbasicの事を先生にお伺いして現在独学で1カ月ほどこちらのサイトを参考にして勉強しています。VisualBasicを用いた理由としては、簡単にアプリケーションを作れるとお聞きしたからで、写真を任意のサイズでトリミングをできるアプリを作成したいです。
そこでこちらではそれに伴ってできない箇所についてお伺いしたいです。

アプリの概要として考えている点:pictureBox1にトリミングをしたい写真を表示させて、textboxに打ち込んだサイズに合わせた四角の枠組みがpicturebox1上に表示されマウスホバーに合わせて四角を動かしていき、トリミングをしたい箇所でクリックをするとその位置の四角に合わせて写真が切り取られるというプログラムを組みたいです。

教えていただきたい点:textbox上に打ち込んだサイズ(例:400×400)に合わせた四角(枠線)をpicturebox上に出現させてマウスホバーに合わせて自由に動かせるようになりたい。

こちらについてどのような関数を使えばよいか教えていただきたいです。
どうぞよろしくお願いいたします。