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

  • 问题

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

    保存后的图片属性会再后面多出一些乱码字符


    2015年1月7日 10:01

答案

全部回复

  • 没人看吗?
    2015年1月8日 2:14
  • 你好,

    经过测试,我发现是Bitmap.Save方法执行之后会在property后面多加几个字节,但是原因还没弄清楚。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年1月8日 7:19
    版主
  • 谢谢,问题已经解决了,在字符串转Byte数组之前加“\0”的结束符。就不会有乱码、
    2015年1月8日 8:26