func (enc *Encoder) Encode(w io.Writer, m image.Image) error {
	// Obviously, negative widths and heights are invalid. Furthermore, the PNG
	// spec section 11.2.2 says that zero is invalid. Excessively large images are
	// also rejected.
	mw, mh := int64(m.Bounds().Dx()), int64(m.Bounds().Dy())
	if mw <= 0 || mh <= 0 || mw >= 1<<32 || mh >= 1<<32 {
		return FormatError("invalid image size: " + strconv.FormatInt(mw, 10) + "x" + strconv.FormatInt(mh, 10))
	}

	var e *encoder
	if enc.BufferPool != nil {
		buffer := enc.BufferPool.Get()
		e = (*encoder)(buffer)

	}
	if e == nil {
		e = &encoder{}
	}
	if enc.BufferPool != nil {
		defer enc.BufferPool.Put((*EncoderBuffer)(e))
	}

	e.enc = enc
	e.w = w
	e.m = m

	var pal color.Palette
	// cbP8 encoding needs PalettedImage's ColorIndexAt method.
	if _, ok := m.(image.PalettedImage); ok {
		pal, _ = m.ColorModel().(color.Palette)
	}
	if pal != nil {
		if len(pal) <= 2 {
			e.cb = cbP1
		} else if len(pal) <= 4 {
			e.cb = cbP2
		} else if len(pal) <= 16 {
			e.cb = cbP4
		} else {
			e.cb = cbP8
		}
	} else {
		switch m.ColorModel() {
		case color.GrayModel:
			e.cb = cbG8
		case color.Gray16Model:
			e.cb = cbG16
		case color.RGBAModel, color.NRGBAModel, color.AlphaModel:
			if opaque(m) {
				e.cb = cbTC8
			} else {
				e.cb = cbTCA8
			}
		default:
			if opaque(m) {
				e.cb = cbTC16
			} else {
				e.cb = cbTCA16
			}
		}
	}

	_, e.err = io.WriteString(w, pngHeader)
	e.writeIHDR()
	if pal != nil {
		e.writePLTEAndTRNS(pal)
	}
	e.writeIDATs()
	e.writeIEND()
	return e.err
}
func (enc *Encoder) Encode(w io.Writer, m image.Image) error {
	
	
	
	mw, mh := int64(m.Bounds().Dx()), int64(m.Bounds().Dy())
	if mw <= 0 || mh <= 0 || mw >= 1<<32 || mh >= 1<<32 {
		return FormatError("invalid image size: " + strconv.FormatInt(mw, 10) + "x" + strconv.FormatInt(mh, 10))
	}

	var e *encoder
	if enc.BufferPool != nil {
		buffer := enc.BufferPool.Get()
		e = (*encoder)(buffer)

	}
	if e == nil {
		e = &encoder{}
	}
	if enc.BufferPool != nil {
		defer enc.BufferPool.Put((*EncoderBuffer)(e))
	}

	e.enc = enc
	e.w = w
	e.m = m

	var pal color.Palette
	
	if _, ok := m.(image.PalettedImage); ok {
		pal, _ = m.ColorModel().(color.Palette)
	}
	if pal != nil {
		if len(pal) <= 2 {
			e.cb = cbP1
		} else if len(pal) <= 4 {
			e.cb = cbP2
		} else if len(pal) <= 16 {
			e.cb = cbP4
		} else {
			e.cb = cbP8
		}
	} else {
		switch m.ColorModel() {
		case color.GrayModel:
			e.cb = cbG8
		case color.Gray16Model:
			e.cb = cbG16
		case color.RGBAModel, color.NRGBAModel, color.AlphaModel:
			if opaque(m) {
				e.cb = cbTC8
			} else {
				e.cb = cbTCA8
			}
		default:
			if opaque(m) {
				e.cb = cbTC16
			} else {
				e.cb = cbTCA16
			}
		}
	}

	_, e.err = io.WriteString(w, pngHeader)
	e.writeIHDR()
	if pal != nil {
		e.writePLTEAndTRNS(pal)
	}
	e.writeIDATs()
	e.writeIEND()
	return e.err
}
func ( enc * Encoder ) Encode ( w io . Writer , m image . Image ) error { // Obviously, negative widths and heights are invalid. Furthermore, the PNG // spec section 11.2.2 says that zero is invalid. Excessively large images are // also rejected. mw , mh := int64 ( m . Bounds ( ) . Dx ( ) ) , int64 ( m . Bounds ( ) . Dy ( ) ) if mw <= 0 || mh <= 0 || mw >= 1 << 32 || mh >= 1 << 32 { return FormatError ( " " + strconv . FormatInt ( mw , 10 ) + " " + strconv . FormatInt ( mh , 10 ) ) } var e * encoder if enc . BufferPool != nil { buffer := enc . BufferPool . Get ( ) e = ( * encoder ) ( buffer ) } if e == nil { e = & encoder { } } if enc . BufferPool != nil { defer enc . BufferPool . Put ( ( * EncoderBuffer ) ( e ) ) } e . enc = enc e . w = w e . m = m var pal color . Palette // cbP8 encoding needs PalettedImage's ColorIndexAt method. if _ , ok := m . ( image . PalettedImage ) ; ok { pal , _ = m . ColorModel ( ) . ( color . Palette ) } if pal != nil { if len ( pal ) <= 2 { e . cb = cbP1 } else if len ( pal ) <= 4 { e . cb = cbP2 } else if len ( pal ) <= 16 { e . cb = cbP4 } else { e . cb = cbP8 } } else { switch m . ColorModel ( ) { case color . GrayModel : e . cb = cbG8 case color . Gray16Model : e . cb = cbG16 case color . RGBAModel , color . NRGBAModel , color . AlphaModel : if opaque ( m ) { e . cb = cbTC8 } else { e . cb = cbTCA8 } default : if opaque ( m ) { e . cb = cbTC16 } else { e . cb = cbTCA16 } } } _ , e . err = io . WriteString ( w , pngHeader ) e . writeIHDR ( ) if pal != nil { e . writePLTEAndTRNS ( pal ) } e . writeIDATs ( ) e . writeIEND ( ) return e . err }
// Encode writes the Image m to w in PNG format.
Encode writes the Image m to w in PNG format .