package probe import ( "encoding/binary" "fmt" "os" ) // probeBmp 读取 BMP 文件头中的宽高;自顶向下 BMP 的高度为负值,取绝对值 func probeBmp(filePath string) (*ProbeResult, error) { f, err := os.Open(filePath) if err != nil { return nil, err } defer f.Close() var fileHeader struct { FileType [2]byte FileSize uint32 Reserved1 uint16 Reserved2 uint16 DataOffset uint32 } if err := binary.Read(f, binary.LittleEndian, &fileHeader); err != nil { return nil, err } if string(fileHeader.FileType[:]) != "BM" { return nil, fmt.Errorf("not a valid BMP file") } var infoHeader struct { Size uint32 Width int32 Height int32 Planes uint16 BitsPerPixel uint16 Compression uint32 SizeImage uint32 XPelsPerMeter int32 YPelsPerMeter int32 } if err := binary.Read(f, binary.LittleEndian, &infoHeader); err != nil { return nil, err } return &ProbeResult{Width: abs(infoHeader.Width), Height: abs(infoHeader.Height)}, nil } func abs(v int32) int { if v < 0 { return int(-v) } return int(v) }