teratail header banner
teratail header banner
質問するログイン新規登録
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

0回答

721閲覧

C# 画像のクリックしたところへの拡大縮小

kurumi123456

総合スコア45

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

2クリップ

投稿2019/01/27 07:24

0

2

C#で画像の拡大縮小の際にクリックしたところへの拡大の処理についてです。

単に拡大するとクリック(Ctl + 右クリックで拡大、Ctl + 左クリックで縮小)した場所ではないところが拡大されます。

それをクリックした場所で拡大縮小縮小できるようにしたいと思っています。

pointをつかってx,y座標を指定してあげればいいと思ったのですが、拡大されたとき座標はもとの画像と異なるためうまくいきません。

拡大は4倍のため、拡大後の座標をもとのx,y座標x,yの4倍にしてやればいいと思ったのですがこれもとおりません。

なにかクリックしたポイントへの拡大縮小をおこなう方法はあるでしょうか?

ちなみにツールバーで動かせるようになっているので、ツールバーによる座標の取得という方法をとっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/01/27 07:29

ソースコードを提示してくれないと回答のしようもありません
bochan2

2019/01/27 09:35

質問頂きありがとうございます ソースコードが長いようであればgoogle driveのリンクやgithubでも構いません
kurumi123456

2019/01/27 14:10

みなさま、ご返信ありがとうございます。 ソースコード追記いたします。 //表示する画像 private Bitmap currentImage; //倍率 private double zoomRatio = 1d; //倍率変更後の画像のサイズと位置 private Rectangle drawRectangle; //Button1のクリックイベントハンドラ private void Button1_Click(object sender, EventArgs e) { //表示する画像を読み込む if (currentImage != null) { currentImage.Dispose(); } currentImage = new Bitmap(TextBox1.Text); //初期化 drawRectangle = new Rectangle(0, 0, currentImage.Width, currentImage.Height); zoomRatio = 1d; //画像を表示する PictureBox1.Invalidate(); } //PictureBox1のMouseDownイベントハンドラ private void PictureBox1_MouseDown(object sender, MouseEventArgs e) { PictureBox pb = (PictureBox)sender; //クリックされた位置を画像上の位置に変換 Point imgPoint = new Point( (int)Math.Round((e.X - drawRectangle.X) / zoomRatio), (int)Math.Round((e.Y - drawRectangle.Y) / zoomRatio)); //倍率を変更する if (e.Button == MouseButtons.Left) { zoomRatio *= 2d; } else if (e.Button == MouseButtons.Right) { zoomRatio *= 0.5d; } //倍率変更後の画像のサイズと位置を計算する drawRectangle.Width = (int)Math.Round(currentImage.Width * zoomRatio); drawRectangle.Height = (int)Math.Round(currentImage.Height * zoomRatio); drawRectangle.X = (int)Math.Round(pb.Width / 2d - imgPoint.X * zoomRatio); drawRectangle.Y = (int)Math.Round(pb.Height / 2d - imgPoint.Y * zoomRatio); //画像を表示する PictureBox1.Invalidate(); } //PictureBox1のPaintイベントハンドラ private void PictureBox1_Paint(object sender, PaintEventArgs e) { if (currentImage != null) { //画像をクリックした位置で拡大描画する(拡大画像が400%のため) g.DrawImage(bmp, 4*x, 4*y, resizeWidth, resizeHeight); } } よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問