From faca493fbc993d3ee06782369ada6c3613a30abd Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Wed, 15 Mar 2023 03:18:28 +0900 Subject: [PATCH] go generate --- ebitenutil/text.png | Bin 4290 -> 3743 bytes internal/png/stdlibreader.go | 34 +++++++++++++++++++++++++--------- internal/png/stdlibwriter.go | 30 ++++++++++++++++++++++++++++++ keys.go | 2 +- 4 files changed, 56 insertions(+), 10 deletions(-) diff --git a/ebitenutil/text.png b/ebitenutil/text.png index 9d94ec7d6a862afe7ff28ba7d4ea3ce51af9e44e..e4ebdbf8a59ff22d0e317d30cd5070af1e381eb7 100644 GIT binary patch literal 3743 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 dsSeentRNS { + break + } + } else { + if d.stage >= dsSeenIHDR { + break + } } } + var cm color.Model switch d.cb { case cbG1, cbG2, cbG4, cbG8: diff --git a/internal/png/stdlibwriter.go b/internal/png/stdlibwriter.go index a05054a96..95cd0d384 100644 --- a/internal/png/stdlibwriter.go +++ b/internal/png/stdlibwriter.go @@ -452,6 +452,36 @@ func (e *encoder) writeImage(w io.Writer, m image.Image, cb int, level int) erro if nrgba != nil { offset := (y - b.Min.Y) * nrgba.Stride copy(cr[0][1:], nrgba.Pix[offset:offset+b.Dx()*4]) + } else if rgba != nil { + dst := cr[0][1:] + src := rgba.Pix[rgba.PixOffset(b.Min.X, y):rgba.PixOffset(b.Max.X, y)] + for ; len(src) >= 4; dst, src = dst[4:], src[4:] { + d := (*[4]byte)(dst) + s := (*[4]byte)(src) + if s[3] == 0x00 { + d[0] = 0 + d[1] = 0 + d[2] = 0 + d[3] = 0 + } else if s[3] == 0xff { + copy(d[:], s[:]) + } else { + // This code does the same as color.NRGBAModel.Convert( + // rgba.At(x, y)).(color.NRGBA) but with no extra memory + // allocations or interface/function call overhead. + // + // The multiplier m combines 0x101 (which converts + // 8-bit color to 16-bit color) and 0xffff (which, when + // combined with the division-by-a, converts from + // alpha-premultiplied to non-alpha-premultiplied). + const m = 0x101 * 0xffff + a := uint32(s[3]) * 0x101 + d[0] = uint8((uint32(s[0]) * m / a) >> 8) + d[1] = uint8((uint32(s[1]) * m / a) >> 8) + d[2] = uint8((uint32(s[2]) * m / a) >> 8) + d[3] = s[3] + } + } } else { // Convert from image.Image (which is alpha-premultiplied) to PNG's non-alpha-premultiplied. for x := b.Min.X; x < b.Max.X; x++ { diff --git a/keys.go b/keys.go index 02e992445..e41523122 100644 --- a/keys.go +++ b/keys.go @@ -24,7 +24,7 @@ import ( ) // A Key represents a keyboard key. -// These keys represent pysical keys of US keyboard. +// These keys represent physical keys of US keyboard. // For example, KeyQ represents Q key on US keyboards and ' (quote) key on Dvorak keyboards. type Key int