code: func DecodeConfig(r io.Reader) (image.Config, error) {
  	d := &decoder{
  		r:   r,
  		crc: crc32.NewIEEE(),
  	}
  	if err := d.checkHeader(); err != nil {
  		if err == io.EOF {
  			err = io.ErrUnexpectedEOF
  		}
  		return image.Config{}, err
  	}
  	for {
  		if err := d.parseChunk(); err != nil {
  			if err == io.EOF {
  				err = io.ErrUnexpectedEOF
  			}
  			return image.Config{}, err
  		}
  		paletted := cbPaletted(d.cb)
  		if d.stage == dsSeenIHDR && !paletted {
  			break
  		}
  		if d.stage == dsSeenPLTE && paletted {
  			break
  		}
  	}
  	var cm color.Model
  	switch d.cb {
  	case cbG1, cbG2, cbG4, cbG8:
  		cm = color.GrayModel
  	case cbGA8:
  		cm = color.NRGBAModel
  	case cbTC8:
  		cm = color.RGBAModel
  	case cbP1, cbP2, cbP4, cbP8:
  		cm = d.palette
  	case cbTCA8:
  		cm = color.NRGBAModel
  	case cbG16:
  		cm = color.Gray16Model
  	case cbGA16:
  		cm = color.NRGBA64Model
  	case cbTC16:
  		cm = color.RGBA64Model
  	case cbTCA16:
  		cm = color.NRGBA64Model
  	}
  	return image.Config{
  		ColorModel: cm,
  		Width:      d.width,
  		Height:     d.height,
  	}, nil
  }
docs: // DecodeConfig returns the color model and dimensions of a PNG image without
  // decoding the entire image.