package main
import (
"encoding/binary"
"fmt"
"os"
)
type BitmapHeader struct {
HeadA byte // B
HeadB byte // M
Size uint32 // 文件大小
ReservedA uint16 // 0
ReservedB uint16 // 0
OffBits uint32 // 数据偏移
}
type BitmapInfoHeader struct {
Size uint32 // 结构体大小
Width int32 // 宽度
Height int32 // 高度
Planes uint16 // 面, 恒定为1
BitCount uint16 // 每个像素占用的字节数
Compression uint32 // 压缩类型
SizeImage uint32 // 图形大小
XPerlsPerMeter int32 // 水平分辨率 每米的像素数
YPerlsPerMeter int32 // 每米的像素数
ClrUsed uint32 // 颜色数
ClrImportant uint32 // 调色版
}
func main() {
file, err := os.Open("image.bmp")
if err != nil {
fmt.Println(err)
return
}
var headA, headB byte
binary.Read(file, binary.LittleEndian, &headA)
binary.Read(file, binary.LittleEndian, &headB)
var size uint32
binary.Read(file, binary.LittleEndian, &size)
var reserveA, reserveB uint16
binary.Read(file, binary.LittleEndian, &reserveA)
binary.Read(file, binary.LittleEndian, &reserveB)
var offbits uint32
binary.Read(file, binary.LittleEndian, &offbits)
fmt.Println(headA, headB, size, reserveA, reserveB, offbits)
infoHeader := new(BitmapInfoHeader)
if err := binary.Read(file, binary.LittleEndian, infoHeader); err != nil {
fmt.Println(err)
return
}
fmt.Println(infoHeader)
// /fmt.Println("size", binary.Size(header), binary.Size(infoHeader))
}
输出:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。