package main
import (
"encoding/binary"
"fmt"
"image"
"image/color"
"image/png"
"io"
"log"
"os"
)
type RawImage []byte
func readImageFile(r io.Reader) ([]RawImage, error) {
var magic int32
if err := binary.Read(r, binary.BigEndian, &magic); nil != err{
return nil , err
}
if 0x0803 != magic{
return nil, os.ErrInvalid
}
var picNum int32
if err := binary.Read(r, binary.BigEndian, &picNum); nil != err{
return nil, err
}
var width, heigth int32
if err := binary.Read(r, binary.BigEndian, &width); nil != err{
return nil, err
}
if err := binary.Read(r, binary.BigEndian, &heigth); nil != err{
return nil, err
}
imags := make([]RawImage, picNum)
for i := 0; i < int(picNum); i++ {
imags[i] = make(RawImage, width * heigth)
fLen, err := io.ReadFull(r, imags[i])
if nil != err{
return nil, err
}
if fLen != int(width * heigth) {
return nil, os.ErrInvalid
}
}
return imags, nil
}
func main() {
fp, _ := os.Open("C:\\Users\\wg\\go\\src\\学习go语言\\fxsjy-gonn-master\\example_mnist\\train-images-idx3-ubyte")
if fp==nil{
fmt.Println("打开文件失败")
}
imgs, err := readImageFile(fp)
if nil != err{
log.Fatal(err)
}
fmt.Println(len(imgs))
imCols := 28
imRows := 28
rect := image.Rect(0, 0, imCols, imRows)
rgba := image.NewNRGBA(rect)
for dy := 0; dy < imCols; dy++{
for dx := 0; dx < imRows; dx++{
rgba.Set(dy, dx, color.Gray{
imgs[2][dy + dx * imRows]})
}
}
fIm, err := os.Create("333.png")
fmt.Println("保存成功")
if nil != err{
log.Fatal(err)
}
err = png.Encode(fIm, rgba)
if nil != err{
log.Fatal(err)
}
}