如何从图片框中逐个切割图片

时间:2015-11-08 14:20:50

标签: c# winforms picturebox rectangles

我需要使用此图片框中的矩形从pictureBox剪切部分图片。现在我将图像加载到图片框(并将其缩放到图片框)并在图片框内绘制可调整大小的矩形,但我不知道如何通过此矩形切割例如图片框的左下角。

修改

Example 我需要通过这个矩形切割轮并将其保存到jpeg 但这个矩形不是静态的。

2 个答案:

答案 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()");
        }
    }