ico.go 637 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package imageSize
  2. import (
  3. "encoding/binary"
  4. "io"
  5. )
  6. func DecodeIcoMeta(r io.Reader) (*Meta, error) {
  7. var tmp [16]byte
  8. if _, err := io.ReadFull(r, tmp[:6]); err != nil {
  9. return nil, err
  10. }
  11. count := binary.LittleEndian.Uint16(tmp[4:6])
  12. width, height := byte(0), byte(0)
  13. for i := uint16(0); i < count; i++ {
  14. if _, err := io.ReadFull(r, tmp[:]); err != nil {
  15. return nil, err
  16. }
  17. if tmp[0] > width || tmp[1] > height {
  18. width = tmp[0]
  19. height = tmp[1]
  20. }
  21. }
  22. return &Meta{
  23. Format: "ico",
  24. Width: int(width),
  25. Height: int(height),
  26. }, nil
  27. }
  28. func init() {
  29. RegisterFormat("\x00\x00\x01\x00", DecodeIcoMeta)
  30. }