※ ChatGPTを利用し、要約された質問です(原文:【C#】ラバーバンドでのドラッグ矩形範囲の画像切抜)
【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;
}
}