C#如何读取16位的bitmap文件

花海_ 2018-11-24 10:51:49
我存了约600万个16位的short类型数字到一个位深度16位的bitmap里面,并保存到本地。现在我需要读取这个bitmap文件,还原我之前存的这些short类型的数字。但是读取进来的bitmap总是被改成了32位的(Format32bppArgb)。请问,如何能够读取16位的bitmap文件?或者有没有更好的办法能够满足我上述需求?非常感谢!


图1为存到本地之后的bmp文件,里面的位深度是16;图2为读取bmp文件之后的PixelFormat = Format32bppArgb,被修改了。
...全文
996 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
PixelDemon 2018-11-27
  • 打赏
  • 举报
回复
GDIP本身支持的16位格式有限,就只有楼上那几种,如果不是那几种(头文件里的几个相应的mask设置值决定的),C#是不认的,你如果纯粹是要数据,考虑到16位BMP格式是没有压缩的,可以直接读文件,当然你要注意文件头里的高度值是不是负值了。
xuzuning 2018-11-24
  • 打赏
  • 举报
回复
原则上是怎么写的,就怎么读
因为不知道你是如何写的,所以只能泛泛的说如何读

如果真是 Bitmap 那么 PixelFormat 不外是:
Format16bppRgb555
Format16bppRgb565
Format16bppArgb1555
Format16bppGrayScale
之一
可用 BitmapData 锁定读取
用 Marshal.Copy 一次性读取到 Int16[] 数组中(内存法)

考虑到 600万数据不会一次性用到
可以通过二进制读(BinaryReader)分批读取,以减少内存开销
为减少文件 I/O 的开销,还可以使用内存映射文件(MemoryMappedFile)方式操作
注意:对于 BMP 文件,需跳过前面的 52 字节的头



threenewbee 2018-11-24
  • 打赏
  • 举报
回复
16bit,每个颜色5bit https://blog.csdn.net/mfcing/article/details/7451670

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧