• go 读取BMP文件头二进制读取


    BMP文件头定义:

    WORD 两个字节 16bit

    DWORD 四个字节 32bit

    package main
    
    import (
    	"encoding/binary"
    	"fmt"
    	"os"
    )
    
    func main() {
    	file, err := os.Open("tim.bmp")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    
    	defer file.Close()
    
    	//type拆成两个byte来读
    	var headA, headB byte
    	//Read第二个参数字节序一般windows/linux大部分都是LittleEndian,苹果系统用BigEndian
    	binary.Read(file, binary.LittleEndian, &headA)
    	binary.Read(file, binary.LittleEndian, &headB)
    
    	//文件大小
    	var size uint32
    	binary.Read(file, binary.LittleEndian, &size)
    
    	//预留字节
    	var reservedA, reservedB uint16
    	binary.Read(file, binary.LittleEndian, &reservedA)
    	binary.Read(file, binary.LittleEndian, &reservedB)
    
    	//偏移字节
    	var offbits uint32
    	binary.Read(file, binary.LittleEndian, &offbits)
    
    	fmt.Println(headA, headB, size, reservedA, reservedB, offbits)
    
    }
    

      执行结果

    66 77 196662 0 0 54

    使用结构体方式

    package main
    
    import (
    	"encoding/binary"
    	"fmt"
    	"os"
    )
    
    type BitmapInfoHeader struct {
    	Size           uint32
    	Width          int32
    	Height         int32
    	Places         uint16
    	BitCount       uint16
    	Compression    uint32
    	SizeImage      uint32
    	XperlsPerMeter int32
    	YperlsPerMeter int32
    	ClsrUsed       uint32
    	ClrImportant   uint32
    }
    
    func main() {
    	file, err := os.Open("tim.bmp")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    
    	defer file.Close()
    
    	//type拆成两个byte来读
    	var headA, headB byte
    	//Read第二个参数字节序一般windows/linux大部分都是LittleEndian,苹果系统用BigEndian
    	binary.Read(file, binary.LittleEndian, &headA)
    	binary.Read(file, binary.LittleEndian, &headB)
    
    	//文件大小
    	var size uint32
    	binary.Read(file, binary.LittleEndian, &size)
    
    	//预留字节
    	var reservedA, reservedB uint16
    	binary.Read(file, binary.LittleEndian, &reservedA)
    	binary.Read(file, binary.LittleEndian, &reservedB)
    
    	//偏移字节
    	var offbits uint32
    	binary.Read(file, binary.LittleEndian, &offbits)
    
    	fmt.Println(headA, headB, size, reservedA, reservedB, offbits)
    
    	infoHeader := new(BitmapInfoHeader)
    	binary.Read(file, binary.LittleEndian, infoHeader)
    	fmt.Println(infoHeader)
    
    }
    

      执行结果:

    66 77 196662 0 0 54

    &{40 256 256 1 24 0 196608 3100 3100 0 0}

  • 相关阅读:
    vector详解
    笔记
    积木大赛
    codevs 1086 栈(Catalan数)
    不要把球传我
    同余方程 (codevs1200)
    最小集合
    数的计算
    产生数
    逃跑的拉尔夫
  • 原文地址:https://www.cnblogs.com/saryli/p/11064837.html
Copyright © 2020-2023  润新知