,用Bit地图 更改图片属性,保存乱码

求助,用Bitmap 更改图片属性,保存乱码。


  /// <summary>
    /// 开始处理图片
    /// </summary>
    /// <param name="dr"></param>
    public void Doimg(string path, int ids, Byte[] values)
    {

        Bitmap bmp = new Bitmap(path);       //加载资源
        string newpath = path.Replace(".jpg", "Temp.jpg");             //临时保存路径
        setTag(bmp, ids, values);   //添加属性
        delpath(newpath);    //保存前先删除旧的
        bmp.Save(newpath);   //保存新的到临时文件
        bmp.Dispose();       //释放资源
        delpath(path);       //删除源文件
        new FileInfo(newpath).MoveTo(path);   //临时保存的改成原先的文件名
    }



添加属性的方法



 private PropertyItem CreatePropertyItem(Bitmap bmp, short type, int tag, byte[] value)
    {

        PropertyItem item = bmp.PropertyItems[0];
        item.Type = type;
        item.Len = value.Length;
        item.Id = tag;
        item.Value = new byte[value.Length];
        value.CopyTo(item.Value, 0);
        return item;
    }
    public PropertyItem setTag(Bitmap bmp, int id, byte[] data)
    {
        PropertyItem p = CreatePropertyItem(bmp, 0x2, id, data);
        bmp.SetPropertyItem(p);
        return p;
    }


保存后的图片属性会再后面多出一些乱码字符
,用Bit地图 更改图片属性,保存乱码



------解决思路----------------------
可能是values的字符编码问题,乱码处应该是什么?
------解决思路----------------------
Refer here:
http://msdn.microsoft.com/en-us/library/System.Drawing.Image_properties(v=vs.110).aspx
------解决思路----------------------
values 应该是 UNICODE 编码外加两个零字节,  00 00, 用这个:
byte[] values = Encoding.Unicode.GetBytes("abcd" + '\0');