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

このQ&Aのポイント
  • C#で作成中のツールでは、画像の表示やピクチャボックスへの画像ファイルの保存はできていますが、選択範囲のみを切り抜いて保存する処理ができません。
  • ラバーバンドを使用して選択範囲を指定し、その範囲のみを切り抜いて画像ファイルとして保存したいと考えています。
  • この処理についてご教示いただけますでしょうか?
回答を見る
  • ベストアンサー

【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; } }

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8521/19370)
回答No.1

GDIイメージオブジェクトを生成して、CopyRectで「範囲指定された矩形領域」を作成したGDIイメージオブジェクトにコピーして、GDIイメージオブジェクトにコピーされたイメージをpictureBox1にアサインして、pictureBox1.Image.Saveでセーブ。 上に書いてある事が理解できない場合は、理解できるまで参考書などを読み込むこと。

関連するQ&A

  • Visual Basic 2005で困ってます

    「ファイルを開く」ダイアログを表示して 画像ファイルを選択し、そのファイルをPictureboxに表示させたいのですが 画像が表示されずエラーが出てしまいます。 Private Sub 開くOToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くOToolStripMenuItem.Click Dim ofd As New OpenFileDialog() ofd.FileName = ""   ofd.InitialDirectory = "デスクトップ"       ofd.Filter = _ "すべてのピクチャーファイル(*.jpg;*.jpeg)|*.jpg;*.jpeg|すべてのファイル(*.*)|*.*"   ofd.FilterIndex = 2 ofd.Title = "開くファイルを選択してください" ofd.RestoreDirectory = True ofd.CheckFileExists = True ofd.CheckPathExists = True If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then Console.WriteLine(ofd.FileName) lstFileName.Items.Add(ofd.FileName) End If このようなプログラムなのですが どのように変えたらよろしいでしょうか? 教えてください、よろしくお願いします。

  • VC#でのファイル保存

    private void Save_File_Click(object sender, System.EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) {pb2.Image.Save(saveFileDialog1.FileName,ImageFormat.Jpeg);} } ↑のようにすると、「型または名前空間名 'ImageFormat' が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください。」とエラーがでます。 テキストを真似てプログラムしたのですが・・・ pb2はpictureBox2です(PictureBox pb2;pb2=pictureBox2;) よろしくお願いします。

  • VC#で品質を指定してJpeg保存する方法

    pictureBox1に開かれている画像をJpegで保存する場合、以下のようにすると本に書いてありましたので、試してみたところ画質が悪かったです。 private void menuItem1_Click(object sender, System.EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { pictureBox1.Image.Save(saveFileDialog1.FileName,ImageFormat.Jpeg); } } 検索したところ、Jpegの場合、品質を指定することができるようですが(http://dobon.net/vb/dotnet/graphics/encoderparameters.html)、このサイトのは微妙に違うのでよくわかりません。 pictureBox1に開かれている画像をファイル名を指定して、Jpeg保存する方法を教えて下さい。よろしくお願いします。

  • VB2008 PaintイベントとResize

    VB初心者です VisualStudio2008 VBを使用しております 早速質問なのですが Form1にPictureBox1があり、プロパティDockがFillとします このピクチャーボックスの色を赤にして、左上から中心に向かって線を引きたいのですが Public Class Form1 Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint Dim p1XC, p1YC As Integer p1XC = PictureBox1.Width / 2 p1YC = PictureBox1.Height / 2 e.Graphics.Clear(Color.Red) e.Graphics.DrawLine(Pens.Black, 0, 0, p1XC, p1YC) End Sub -------------------------------------------------------------------------------- Private Sub PictureBox1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.Resize Dim p1XC, p1YC As Integer p1XC = PictureBox1.Width / 2 p1YC = PictureBox1.Height / 2 Dim g As Graphics = PictureBox1.CreateGraphics g.Clear(Color.Red) g.DrawLine(Pens.Black, 0, 0, p1XC, p1YC) End Sub End Class ↑は、おかしいですよね? eに書いてるのかgに書いているのか・・・ そもそも←の考え方がおかしいのか eの扱いがよくわからないです。 *同じ色だとわからないですが、色違いにすると大きくした時は増えた部分しか書かれてない *ペイントのみにしてしまうとサイズを小さくしたときに中心に線がいかない *リサイズのみだと元の部分しか塗られない こういう場合どうするのがいいのしょうか? 実際はもっと複雑な絵を描きたいので、イベントと描写を分けたいと思っているのですが・・・ どなたかご教示下さい。

  • デジタルカメラの保存形式のバリエーション

    デジタルカメラって一般に保存形式は RAW(現像が必要)、TIFF(ファイルでかい)、JPEG(非可逆)とそれぞれ欠点があると思うのですが、 なぜファイルが比較的小さくて可逆圧縮のPNGやGIFはほぼサポートされていないのでしょうか? 折角いい機材を使ってもJPEGで劣化するのは勿体無いと思うし、かといってRAWやTIFFなどはプロでもない限り加工しないと使わないと思うのですが。

  • 画像のファイル形式の違いについて

     画像のファイル形式って、たくさんあって、違いがよくわかりません。JPEG,TIFF,BMP,PICT,GIF,PNGって具合にほんとたくさんあって、困ってます。  それぞれがどのように違うのを教えてください。たぶん、圧縮の仕方が違うだと思うのですが。本とか、ホームページとかも教えてくれたら嬉しいです。

  • TIFFファイルをプリントする方法について

    こんにちは。 デジカメで撮ったデータがTIFF形式となっていました。 インターネットや店頭で写真にしようと思ったら、 JPEG形式にしないといけないらしいんです。 せっかくTIFF形式なのにJPEG形式で圧縮するのももったいないと思うんです。 adobe photoshop album 2.0 miniというソフトがパソコンにインストールされているんですが、 これのオンラインサービスだと、 TIFFファイルから写真にしてくれるのでしょうか。 それかーTIFFファイルから写真にしてくれるお店とかあったら教えてください。 よろしくお願いします。

  • adobe photoshop album 2.0 miniについて

    こんにちは。 デジカメで撮ったデータがTIFF形式となっていました。 インターネットや店頭で写真にしようと思ったら、 JPEG形式にしないといけないらしいんです。 せっかくTIFF形式なのにJPEG形式で圧縮するのももったいないと思うんです。 adobe photoshop album 2.0 miniというソフトがパソコンにインストールされているんですが、 これのオンラインサービスだと、 TIFFファイルから写真にしてくれるのでしょうか。 それかーTIFFファイルから写真にしてくれるお店とかあったら教えてください。 よろしくお願いします。

  • ファイル圧縮形式の変更について

    TIFFファイルについてお願いします。 あるスキャナーにおいて、取込んだ画像がTIFFファイルとして作成されます。 画像がモノクロの場合、圧縮形式は"G4" 画像がカラーの場合、圧縮形式は"JPEG" となっており、圧縮形式の変更は出来ません。 このファイルをWEBサーバで使用する際に、ImageMagickのconvertを利用し、"TIFF"→"JPEG"にファイルをコンバートしています。 ここで問題が発生しているのですが、モノクロの場合はJPEGに変換が行えるのですが、カラーの場合はconvertでエラーとなっています。 おそらくカラーのTIFFファイルが"JPEG"での圧縮形式の為、JPEGに変換する時にエラーが発生しているものと思われます。 これを回避する為にTIFFファイルの圧縮形式を変更するか、JPEG以外のファイルに変換するかを考えていますが、上手く実行できません。 良い方法、又はImageMagickでconvertさせる方法をご存知の方がいらっしゃいましたら、是非ご教授下さい。 よろしくお願いします。

  • ピクチャーをJPEG形式でCDに

    ピクチャーをJPEG形式でCDに焼きつけたいのですが、ipotoではJPG, TIFF, PNG, での書き出しはできるのですが。 ためしにJPG形式でやってみましたがDVDで再生できませんでした。 ご存じの方いらっしゃいましたら、教えてください。

    • ベストアンサー
    • Mac

専門家に質問してみよう