C# image转换byte后,再转换回image保存到*.bmp文件深度被改变了
答案:4 悬赏:0 手机版
解决时间 2021-04-13 04:19
- 提问者网友:最爱你的唇
- 2021-04-12 07:04
C# image转换byte后,再转换回image保存到*.bmp文件深度被改变了
最佳答案
- 五星知识达人网友:轻熟杀无赦
- 2021-04-12 07:09
我用你的代码试了一下 好使.
byte[] photo = null;
MemoryStream ms = new MemoryStream();
Bitmap bmp = new Bitmap(pb.Image);
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
photo = new byte[ms.Length];
ms.Position = 0;
ms.Read(photo, 0, Convert.ToInt32(ms.Length));
bmp.Dispose();
MemoryStream ms1 = new MemoryStream(photo);
Image img = Image.FromStream(ms1);
img.Save(@"C:UserssamsungDesktop
ew1.bmp");原BMP 1.bmp 48*30 4.27KB
新BMP new1.bmp 48*30 5.67KB
参考
http://blog.csdn.net/azkabannull/article/details/7770157
追问网址里面的方法不行的,转出时伪8位深度,真实深度还是24位的。只是处理了灰度而已。
byte[] photo = null;
MemoryStream ms = new MemoryStream();
Bitmap bmp = new Bitmap(pb.Image);
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
photo = new byte[ms.Length];
ms.Position = 0;
ms.Read(photo, 0, Convert.ToInt32(ms.Length));
bmp.Dispose();
MemoryStream ms1 = new MemoryStream(photo);
Image img = Image.FromStream(ms1);
img.Save(@"C:UserssamsungDesktop
ew1.bmp");原BMP 1.bmp 48*30 4.27KB
新BMP new1.bmp 48*30 5.67KB
参考
http://blog.csdn.net/azkabannull/article/details/7770157
追问网址里面的方法不行的,转出时伪8位深度,真实深度还是24位的。只是处理了灰度而已。
全部回答
- 1楼网友:冷風如刀
- 2021-04-12 09:43
是不是对图片做修改了追问
保存图片的时候用了这个方法,转换为byte再扔进数据库的
追答using(var ms= new MemoryStream()){
pb.Image.Save(ms,pb.Image.RawFormat);
return ms.ToArray();
}
保存图片的时候用了这个方法,转换为byte再扔进数据库的
追答using(var ms= new MemoryStream()){
pb.Image.Save(ms,pb.Image.RawFormat);
return ms.ToArray();
}
- 2楼网友:执傲
- 2021-04-12 08:35
设置一下Image的PixelFormat属性,将其值设置为Format8bppIndexed追问这个属性是只读的。。。如果是new出来再贴一个新图上去就会报这个错误
无法从带有索引像素格式的图像创建 Graphics 对象。
无法从带有索引像素格式的图像创建 Graphics 对象。
- 3楼网友:不如潦草
- 2021-04-12 08:09
Image 类有个 PixelFormat 属性可以指定位深度,如果不指定,默认就是 32 位的,应该设置为 System.Drawing.Imaging.PixelFormat.Format8bppIndexed 值。
但这个属性是只读的,只能在实例化时指定。
建议先实例化一个 Bitmap(Bitmap 类是继承自 Image 类的),有一种构造方法是 Bitmap(int, int System.Drawing.Imaging.PixelFormat)。然后将你的图片先绘制到新的 Bitmap 对象上,再保存。
不过据说 Image.Save() 方法有个 Bug,具体分析和解决方案参考:http://bbs.csdn.net/topics/330223763追问
但是从旧图贴新图的方法会产生这个错误,怎么解决呢?
无法从带有索引像素格式的图像创建 Graphics 对象。
但这个属性是只读的,只能在实例化时指定。
建议先实例化一个 Bitmap(Bitmap 类是继承自 Image 类的),有一种构造方法是 Bitmap(int, int System.Drawing.Imaging.PixelFormat)。然后将你的图片先绘制到新的 Bitmap 对象上,再保存。
不过据说 Image.Save() 方法有个 Bug,具体分析和解决方案参考:http://bbs.csdn.net/topics/330223763追问
但是从旧图贴新图的方法会产生这个错误,怎么解决呢?
无法从带有索引像素格式的图像创建 Graphics 对象。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯