• 締切済み

C#でマウスのドラッグで範囲を選択し画像を取得する

マウスのドラッグで範囲を選択し画像を取得してPictureBoxに表示 という動作をC#でやりたいのですが、参考になるサイトがVB関連しかなく、困っています。 VBのコードをC#に変換するサイトを見つけたので、下記のサイトで変換してみました。 http://www.developerfusion.com/tools/convert/vb-to-csharp/ 変換しC#でイベントハンドラの名前を修正したり、構文的なエラーを潰し、デバックの起動までは辿りつけたのですが、動作が全く機能していません。 MessageBoxを使いどの動作まで機能しているのか調べたところ、PictureBox1_MouseDown内の動作や、Botton1_Click内の動作といった単純な機能すら動いていませんでした。 コピーペーストしたコードを消し、デザインフォームでButton1をダブルクリックし、その中に手打ちでコードを入力しても駄目だったので、原因がわからず困っています。 原因か解決方法をご存じの方がいらしたら、教えて下さると幸いです。 よろしくお願いします。

みんなの回答

回答No.1

.net環境であるならばVB.netでプログラミングしたDLLと、C#でプログラミングしたEXEを混在させるといったようなことが可能です。 マウスのドラッグで指定した範囲の画像を取得する機能のみVB.netでプログラミングし、C#でプログラミングしたEXEに読み込ませるという手法ではいけないでしょうか? また、VB.netとC#では構文の微妙な違いからロジックに変更を加えないと動作が異なる場合も有ります。 実際にソースを見ないとロジックに変更が必要なのか、移植時のオペレーションミスなのか判断がつかないため、変換前のVBソースとでバック起動できたC#ソースを見せていただけると何かアドバイスができるかもしれません。

関連するQ&A

  • VB6でマウスのドラッグで範囲を選択し画像を取得

    こんかいVBを初めて扱っています。 マウスのドラッグで範囲を選択し画像を取得してPictureBox2 に表示 ということをVB6で作成しようとしています。 参考になりそうなサイトは見つけたのですが、 http://hanatyan.sakura.ne.jp/dotnet/zu06.htm VBのバージョンが違うのでコンパイルは通りません。 関数の名前が変わっているから出来ないのか、 同じ機能は無いから違う方法を取らなければいけないのか? わからないことだらけで、ハマっています。 もし、何でも良いのでご存知の方がいらっしゃいましたら、 何卒、ご教授宜しくお願い致します。

  • VB 2005 PictureBox

    VB2005 のPictureBox には、VB6にはあるAutoRedraw機能はないのでしょうか?コード上にMe.Refreshとか、PictureBox.Refreshと書くしかないのでしょうか。すみませんが、どなたか教えて下さい。

  • 【C#】ラバーバンドでのドラッグ矩形範囲の画像切抜

    現在C#にて画像を表示してラバーバンドで選択した範囲のみを切り抜いて画像ファイルとして保存する。 というツールを製作しているのですが、ラバーバンドの表示やピクチャボックス全体の画像ファイルの保存はできたのですが選択範囲のみを切り抜いて保存すると言う処理が私にはかけません。。 どなたか助けてはいただけないでしょうか? public partial class Form1 : Form { private int _xi, _yi, _xc, _yc; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //OpenFileDialogクラスのインスタンスを作成 OpenFileDialog ofd = new OpenFileDialog(); //はじめのファイル名を指定する ofd.FileName = ""; //はじめに表示されるフォルダを指定する ofd.InitialDirectory = @"C:\"; //[ファイルの種類]に表示される選択肢を指定する ofd.Filter = "TIFFファイル(*.tif;*.tiff)|*.tif;*.tiff|JPEGファイル(*.jpg;*.jpeg)|*.jpg;*.jpeg|PNGファイル(*.png)|*.png|ビットマップ(*.bmp)|*.bmp|すべてのファイル(*.*)|*.*"; //[ファイルの種類]ではじめに //「TIFFファイル」が選択されているようにする ofd.FilterIndex = 1; //タイトルを設定する ofd.Title = "開くファイルを選択してください"; //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする ofd.RestoreDirectory = true; //ダイアログを表示する if (ofd.ShowDialog() == DialogResult.OK) { //OKボタンがクリックされたとき //画像の大きさをPictureBoxに合わせる pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; //PictureBox1に選択した画像を表示する pictureBox1.ImageLocation = ofd.FileName; } } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) return; _xi = _xc = e.X; _yi = _yc = e.Y; pictureBox1.Invalidate(); } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) return; _xc = e.X; _yc = e.Y; pictureBox1.Invalidate(); } private void pictureBox1_Paint(object sender, PaintEventArgs e) { if(_xc == _xi && _yc == _yi) return; int x, y, w, h; if(_xc < _xi) { x = _xc; w = _xi - _xc; } else { x = _xi; w = _xc - _xi; } if(_yc < _yi) { y = _yc; h = _yi - _yc; } else { y = _yi; h = _yc - _yi; } e.Graphics.DrawRectangle(Pens.Black, x, y, w, h); } private void button2_Click(object sender, EventArgs e) { //SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // フィルターの設定 sfd.Filter = "TIFF形式|*.tif|GIF形式|*.gif|JPEG形式|*.jpeg|PNG形式|*.png|すべてのファイル(*.*)|*.*"; // ファイル保存ダイアログを表示 sfd.ShowDialog(); String extension = System.IO.Path.GetExtension(sfd.FileName); switch (extension.ToUpper()) { case ".TIF": // PictureBoxのイメージをTIFF形式で保存する pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Tiff); break; case ".GIF": // PictureBoxのイメージをGIF形式で保存する pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Gif); break; case ".JPEG": // PictureBoxのイメージをJPEG形式で保存する pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); break; case ".PNG": // PictureBoxのイメージをGIF形式で保存する pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Png); break; } }

  • 画像のパスをコードで指定したい

    画像のパスをコードで指定したい vb2010を使用しています。 フォームにPictureBox1を設置したのですが プロパティからではなくVBコードでピクチャのパスを指定するにはどうすればいいですか? Me.PictureBox1="C:\Users\ユーザーアカウント名\Desktop\○.jpg" だと 「'String' の値を 'System.Windows.Forms.PictureBox' に変換できません」 というエラーになります。 Me.PictureBox1.○○=" となるのでしょうか? vbaだと Form_フォーム1.イメージ0.Picture = "C:\Users\ユーザーアカウント名\Desktop\○.jpg" でうまくいきました。 ご教授よろしくお願い致します。

  • PictureBoxに絵を書き込む

    輪郭を検出して合成写真に利用するプログラムを作っているのですが、輪郭が途切れてしまうことがあります。 そこで、PictureBoxのクリックした部分を認識して、輪郭を手動で補うというプログラムを作りたいのですが、どのようにしたらいいのでしょうか。 PictureBoxのMouseClickを利用するとドラッグで線を引いたりできず、MouseDownだとうまくいきません。 マルチスレッドというような感じにすれば良さそうですが、よくわかりません。 言語はC#です。 よろしくお願いします。

  • 【C#】Nameの取得について

    いつもお世話になります。 C#に関して質問です。 visualC#2008を使っています。 今、pictureboxを縦に順に表示させていくと同時に、一つ一つのpictureboxに名前を付ける処理をプログラムしています。 今度は、その名前をMessageBoxで取得するプログラムを作成しようとしているのですが、うまくいきません。 hanpuku_pic_Click_1で新しくhanpuku_picをインスタンス作成するとメッセージが空白になってしまいます。 誰か解決策をお願いします。 プログラムは下記のように書いているところです private void hanpuku_Click(object sender, EventArgs e) { this.SuspendLayout(); Array.Resize(ref this.hanpuku_array, this.hanpuku_array.Length + 1); PictureBox hanpuku_pic = new PictureBox(); hanpuku_array[this.hanpuku_array.Length - 1] = hanpuku_pic; hanpuku_pic.Name = "hanpuku_pic" + this.hanpuku_array.Length.ToString(); hanpuku_pic.Location = new Point(xx, 90 * (hanpuku_array.Length - 1)); hanpuku_pic.BackColor = System.Drawing.SystemColors.Window; hanpuku_pic.Size = new System.Drawing.Size(160, 70); hanpuku_pic.BringToFront(); hanpuku_pic.Image = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\algorithm\algorithm\picture\反復箱.png"); hanpuku_pic.SizeMode = PictureBoxSizeMode.StretchImage; hanpuku_pic.Click += new EventHandler(hanpuku_pic_Click_1); this.ResumeLayout(false); this.PerformLayout(); this.panel1.Controls.Add(hanpuku_pic); } private void hanpuku_pic_Click_1(object sender, EventArgs e) { MessageBox.Show(hanpuku_pic.Name); }

  • データグリッドにdataを表示する方法をおしえて?

    vb.net 超初心者です。 datagrid(データグリッド)にdataを表示する方法を教えてください。 テーブル:社員テーブル 社員コード 社員名 001 あいうえお 002 かきくけこ 003 さしすせそ ---------------------- | [BOTTON1] | | | | [社員コード] [社員名] | | 001 あいうえお | | 002 かきくけこ | | 003 さしすせそ | ----------------------- [BOTTON1]をクリックすると上のように表示。 できれば、DATASETを使用した場合と、使用しない場合の2種類の方法をおしえてください。

  • vbからc++へコードを変換するサイトはありますか?

    vbからc++へコードを変換するサイトはありますか? 前にvbからc#への変換サイトは見た気がします。 ご存知の方教えてください。よろしくお願いします。

  • マウスで画像の移動(VB2010)

    FormにPanelを配置してそのなかにPicturBoxを配置しています。 エクスプローラから画像をドラッグアンドドロップして、マウスで画像を移動させようと考えています。 (Panelのサイズを250,250にして、1024*768ピクセルの画像の一部を窓から見ているような感じ) 下記のコードを書いたのですが、マウスを左クリックした状態のままマウスを移動させると、画像がちらつきます。 PictureBox1.Refresh()を入れて多少現象しましたが、根本的な問題の解決には至っておりません。 どなたか?詳しい方いらっしゃいましたら教えて頂けないでしょうか?宜しくお願いいたいます。 Private drawFlag As Boolean Private ptStart As Point Private ptEnd As Point Private Sub PictureBox1_DragEnter(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles PictureBox1.DragEnter If e.Data.GetDataPresent(DataFormats.FileDrop) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub Private Sub PictureBox1_DragDrop(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles PictureBox1.DragDrop Dim strFileName As String() = CType(e.Data.GetData(DataFormats.FileDrop), String()) Dim fi As New System.IO.FileInfo(strFileName(0)) Dim MyBmp As Bitmap = System.Drawing.Image.FromFile(strFileName(0)) PictureBox1.Image = MyBmp End Sub Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize PictureBox1.AllowDrop = True drawFlag = False End Sub Private Sub PictureBox1_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles PictureBox1.MouseMove If drawFlag = False Then Exit Sub End If ptEnd = e.Location Dim ptMove As Point ptMove = ptEnd - ptStart Dim MyLocation As Point MyLocation = PictureBox1.Location + ptMove PictureBox1.Location = MyLocation PictureBox1.Refresh() ptStart = ptEnd End Sub Private Sub PictureBox1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles PictureBox1.MouseDown If e.Button = Windows.Forms.MouseButtons.Left Then drawFlag = True ptStart.X = e.X ptStart.Y = e.Y End If End Sub Private Sub PictureBox1_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles PictureBox1.MouseUp drawFlag = False End Sub

  • DataGridViewでMauseDown

    VB.NETでDataGridViewでMauseDownイベントを実装するとCellContentClickイベントやCellClickイベントが発生しなくなりました。 VB.NETのバージョンは4.6.2です。 Panelコントロール上に配置したDataGridViewのCellContentClickイベント内でClickされたセルの列に応じた処理を行っています。 このDataGridViewにDrag&Dropの機能を設けるべく、MouseDownイベントを追加しました。 MouseDownイベント内に記述した処理の動作も問題無く、全体の動作確認を行っていると、DataGridViewのCellContentClickイベントが発生していない事に気がつきました。 CellContentClickイベント内の処理の1行目にブレークポイントを設置して確認しました。 試しにMouseDownイベント自体をコメントアウトするとCellContentClickイベント内の処理は実行されました。 MouseDownイベント、CellContentClickイベントの両方を動作させる方法はありますでしょうか?

専門家に質問してみよう