2009-11-23 7 views
3

je reçois unEnregistrement d'une image, une erreur générique est produite dans GDI +

Une erreur générique est produite dans GDI +

exception quand je l'appelle img.Save(path, jpegCodec, encoderParams);
est ici tout le 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; 
    } 

Pouvez-vous m'aider?

Répondre

7

Tant que l'objet image créé a été créé en chargeant l'image à partir du fichier, le fichier est en cours d'utilisation. Vous ne pouvez pas enregistrer une image portant le même nom lorsque le fichier est en cours d'utilisation. Au lieu d'utiliser Image.FromFile pour charger l'image, ouvrez un flux de fichier et utilisez Image.FromStream pour créer l'image, puis fermez le flux de fichiers. Au lieu de De cette façon, le fichier n'est plus utilisé et vous pouvez le remplacer.

0
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); 
} 
+0

veuillez guider le PO comment cela résout ses problèmes –

Questions connexes