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))
}
输出: