我需要使用此图片框中的矩形从pictureBox剪切部分图片。现在我将图像加载到图片框(并将其缩放到图片框)并在图片框内绘制可调整大小的矩形,但我不知道如何通过此矩形切割例如图片框的左下角。
修改
Example 我需要通过这个矩形切割轮并将其保存到jpeg 但这个矩形不是静态的。
答案 0 :(得分:1)
我不完全确定我理解您的全部要求,但您可以使用BitMap的Clone方法裁剪图像。例如,这会在一个pictureBox1中裁剪图像并将其加载到pictureBox2中:
using (Bitmap bmp = new Bitmap(pictureBox1.Image))
{
var newImg = bmp.Clone(
new Rectangle { X = 10, Y = 10, Width = bmp.Width / 2, Height = bmp.Height / 2 },
bmp.PixelFormat);
pictureBox2.Image = newImg;
}
操作图像时很容易泄漏手柄。稍后您将需要小心处理pictureBox2.Image,特别是如果您多次重新加载图像。
答案 1 :(得分:0)
Asumming你可以创建你的矩形并处理它(在你的图片框上绘制它,计算它的面积......):
private static Image CropImage(Image img, Rectangle cropArea)
{
try {
Bitmap bmpImage = new Bitmap(img);
Bitmap bmpCrop = bmpImage.Clone(cropArea /*your rectangle area*/, bmpImage.PixelFormat);
return (Image)(bmpCrop);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "CropImage()");
}
return null;
}
private void saveJpeg(string path, Bitmap img, long quality)
{
EncoderParameter qualityParam = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality, (long)quality);
ImageCodecInfo jpegCodec = getEncoderInfo("image/jpeg");
if (jpegCodec == null)
{
MessageBox.Show("Can't find JPEG encoder?", "saveJpeg()");
return;
}
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
img.Save(path, jpegCodec, encoderParams);
}
private ImageCodecInfo getEncoderInfo(string mimeType)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
for (int i = 0; i < codecs.Length; i++)
if (codecs[i].MimeType == mimeType)
return codecs[i];
return null;
}
private void btnPerformSaveImage_Click(object sender, EventArgs e)
{
try
{
Image img = (Bitmap)CropImage(new Bitmap(pictureBox1.Image, pictureBox1.Size), CropRect);
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "btnOK_Click()");
}
}