2009-11-23 3 views
3

나는는 이미지를 저장, 일반 오류가 GDI에서 발생 +

일반 오류가 여기 img.Save(path, jpegCodec, encoderParams);
코드의 전부입니다 호출 할 때 GDI에 +

예외를 발생 얻을 :

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; 
    } 

도와 주시겠습니까?

답변

7

파일에서 이미지를로드하여 생성 된 이미지 개체가 존재하는 한 파일이 사용 중입니다. 파일이 사용 중일 때 같은 이름의 이미지를 저장할 수 없습니다.

Image.FromFile을 사용하여 이미지를로드하는 대신 파일 스트림을 열고 Image.FromStream을 사용하여 파일 스트림을 닫습니다. 그렇게하면 파일이 더 이상 사용되지 않고 대체 할 수 있습니다.

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

OP 문제 해결 방법을 알려주십시오. –

관련 문제