upd
This commit is contained in:
+79
@@ -0,0 +1,79 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
// BMPFileHeader represents the bitmap file header structure.
|
||||
type BMPFileHeader struct {
|
||||
FileType [2]byte
|
||||
FileSize uint32
|
||||
Reserved1 uint16
|
||||
Reserved2 uint16
|
||||
DataOffset uint32
|
||||
}
|
||||
|
||||
// BMPInfoHeader represents the bitmap info header structure.
|
||||
type BMPInfoHeader struct {
|
||||
Size uint32
|
||||
Width int32
|
||||
Height int32
|
||||
Planes uint16
|
||||
BitsPerPixel uint16
|
||||
Compression uint32
|
||||
SizeImage uint32
|
||||
XPelsPerMeter int32
|
||||
YPelsPerMeter int32
|
||||
ColorsUsed uint32
|
||||
ColorsImportant uint32
|
||||
}
|
||||
|
||||
func readBmpInfo(filePath string) (error, int32, int32) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
fmt.Printf("=== Failed to open file: %v\n", err)
|
||||
return err, 0, 0
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// Read the file header.
|
||||
var fileHeader BMPFileHeader
|
||||
if err := binary.Read(file, binary.LittleEndian, &fileHeader); err != nil {
|
||||
fmt.Printf("=== Failed to Read file: %v\n", err)
|
||||
return err, 0, 0
|
||||
}
|
||||
|
||||
// Check if it's a valid BMP file by verifying the file type.
|
||||
if string(fileHeader.FileType[:]) != "BM" {
|
||||
fmt.Printf("=== Not a valid BMP file: %v\n", err)
|
||||
return err, 0, 0
|
||||
}
|
||||
|
||||
// Read the info header.
|
||||
var infoHeader BMPInfoHeader
|
||||
if err := binary.Read(file, binary.LittleEndian, &infoHeader); err != nil {
|
||||
fmt.Printf("=== Failed to Read file: %v\n", err)
|
||||
return err, 0, 0
|
||||
}
|
||||
return err, infoHeader.Width, infoHeader.Height
|
||||
//fmt.Printf("=== File size: %d bytes\n", fileHeader.FileSize)
|
||||
//fmt.Printf("=== Image dimensions: %dx%d\n", )
|
||||
//fmt.Printf("=== Bits per pixel: %d\n", infoHeader.BitsPerPixel)
|
||||
|
||||
// At this point, you would typically read the pixel data into a slice,
|
||||
// taking into account any padding required for alignment and the specific
|
||||
// pixel format (e.g., RGB, RGBA, indexed color). This part is omitted here.
|
||||
|
||||
// You may also need to skip over a possible color palette if present.
|
||||
// The size of the palette can be inferred from the number of colors used and
|
||||
// the bits per pixel value.
|
||||
|
||||
// For simplicity, we'll just read the rest of the file as raw bytes.
|
||||
//data, err := ioutil.ReadAll(file)
|
||||
//if err != nil {
|
||||
// panic(err)
|
||||
//}
|
||||
//fmt.Printf("=== Read %d bytes of pixel data.\n", len(data))
|
||||
}
|
||||
Reference in New Issue
Block a user