简体   繁体   English

正在保存图片,GDI +中发生一般错误

[英]Saving An image,A generic error occurred in GDI+

i get an 我得到了

A generic error occurred in GDI+ GDI +中发生一般错误

exception when I call img.Save(path, jpegCodec, encoderParams); 当我调用img.Save(path, jpegCodec, encoderParams);时发生异常img.Save(path, jpegCodec, encoderParams);
here is all of the code : 这是所有代码:

    private Image img;

    private void button1_Click(object sender, EventArgs e)
    {
        this.img = Image.FromFile(@"path");

        pictureBox1.Image = img;

        if (img.Height < pictureBox1.Height && img.Width < pictureBox1.Width)
        {
            this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
        }

        Graphics g = Graphics.FromImage(img);

        Font font=new Font("Arial",16);

        SolidBrush brush = new SolidBrush(Color.Black);

        brush.Color = Color.FromArgb(255, 0, 0, 255);

        g.DrawString("myName", font, brush, img.Width - 178, img.Height-105);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Bitmap bitmap = new Bitmap(img);

        saveJpeg(@"path", bitmap, 85L);
    }

    private void saveJpeg(string path, Bitmap img, long quality)
    {
        // Encoder parameter for image quality
        EncoderParameter qualityParam =new EncoderParameter(Encoder.Quality, quality);

        // Jpeg image codec
        ImageCodecInfo jpegCodec = getEncoderInfo("image/jpeg");

        if (jpegCodec == null)
            return;

        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = qualityParam;

        //img.Save(path, jpegCodec, encoderParams);
        img.Save(path, jpegCodec, encoderParams);
    }
    private ImageCodecInfo getEncoderInfo(string mimeType)
    {
        // Get image codecs for all image formats
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

        // Find the correct image codec
        for (int i = 0; i < codecs.Length; i++)
            if (codecs[i].MimeType == mimeType)
                return codecs[i];
        return null;
    }

Would you help me? 你能帮我吗?

As long as the image object exists that was created by loading the image from the file, the file is in use. 只要存在通过从文件加载图像创建的图像对象,该文件就在使用中。 You can't save an image with the same name while the file is in use. 使用该文件时,您不能使用相同名称保存图像。

Instead of using Image.FromFile to load the image, open a file stream and use Image.FromStream to create the image, then close the file stream. 代替使用Image.FromFile加载图像,而是打开文件流并使用Image.FromStream创建图像,然后关闭文件流。 That way the file is no longer in use, and you can replace it. 这样,该文件将不再使用,您可以替换它。

public ActionResult CropImage(string hdnx, string hdny, string hdnw, string hdnh)
{
    string fname = "pool.jpg";
    string fpath = Path.Combine(Server.MapPath("~/images"), fname);
    Image oimg = Image.FromFile(fpath);
    Rectangle cropcords = new Rectangle(
    Convert.ToInt32(hdnx),
    Convert.ToInt32(hdny),
    Convert.ToInt32(hdnw),
    Convert.ToInt32(hdnh));
    string cfname, cfpath;
    Bitmap bitMap = new Bitmap(cropcords.Width, cropcords.Height,img.PixelFormat);

    Graphics grph = Graphics.FromImage(bitMap);
    grph.DrawImage(oimg, new Rectangle(0, 0, bitMap.Width, bitMap.Height), cropcords, GraphicsUnit.Pixel);
    cfname = "crop_" + fname;
    cfpath = Path.Combine(Server.MapPath("~/cropimages"), cfname);
    bitMap.Save(cfpath);

    return Json("success",JsonRequestBehavior.AllowGet);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM