zoukankan      html  css  js  c++  java
  • 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}

  • 相关阅读:
    redis安装及教程
    Spring Cloud Alibaba系列教程
    EasyCode代码生成工具使用介绍
    FastDFS服务器搭建
    轻量级的java HTTP Server——NanoHttpd
    java代码的初始化过程研究
    浅谈设计模式的学习(下)
    浅谈设计模式的学习(中)
    浅谈设计模式的学习(上)
    PGET,一个简单、易用的并行获取数据框架
  • 原文地址:https://www.cnblogs.com/saryli/p/11064837.html
Copyright © 2011-2022 走看看