网上关与读取图片的EXIF信息的源代码,很多! 我怎么也找不到有关 用C#写入图片的EXIF信息的源代码.望高手指教!感激不尽!!

解决方案 »

  1.   

    EXIF?什么东东?不好意思。没接触过呢
      

  2.   

    ref:
    http://www.codeproject.com/csharp/exifextractor.asp
      

  3.   

    private void WriteNewDescriptionInImage(string Filename,string NewDescription)
    {
    Image Pic;
    PropertyItem[] PropertyItems;
    byte[] bDescription=new Byte[NewDescription.Length];
    int i;
    string FilenameTemp;
    Encoder Enc=Encoder.Transformation;
    EncoderParameters EncParms=new EncoderParameters(1);
    EncoderParameter EncParm;
    ImageCodecInfo CodecInfo=GetEncoderInfo("image/jpeg");// copy description into byte array
    for (i=0;i<NewDescription.Length;i++) bDescription[i]=(byte)NewDescription[i];// load the image to change
    Pic=Image.FromFile(Filename);// put the new description into the right property item
    PropertyItems=Pic.PropertyItems; 
    PropertyItems[0].Id=0x010e; // 0x010e as specified in EXIF standard
    PropertyItems[0].Type=2;
    PropertyItems[0].Len=NewDescription.Length;
    PropertyItems[0].Value=bDescription;
    Pic.SetPropertyItem(PropertyItems[0]);// we cannot store in the same image, so use a temporary image instead
    FilenameTemp=Filename+".temp";// for lossless rewriting must rotate the image by 90 degrees!
    EncParm=new EncoderParameter(Enc,(long)EncoderValue.TransformRotate90);
    EncParms.Param[0]=EncParm;// now write the rotated image with new description
    Pic.Save(FilenameTemp,CodecInfo,EncParms);// for computers with low memory and large pictures: release memory now
    Pic.Dispose();
    Pic=null;
    GC.Collect();// delete the original file, will be replaced later
    System.IO.File.Delete(Filename); // now must rotate back the written picture
    Pic=Image.FromFile(FilenameTemp);
    EncParm=new EncoderParameter(Enc,(long)EncoderValue.TransformRotate270);
    EncParms.Param[0]=EncParm;
    Pic.Save(Filename,CodecInfo,EncParms);// release memory now
    Pic.Dispose();
    Pic=null;
    GC.Collect();// delete the temporary picture
    System.IO.File.Delete(FilenameTemp); 
    }