gpt4 book ai didi

image - Golang PNG 颜色操作不会达到 255

转载 作者:IT王子 更新时间:2023-10-29 01:19:38 26 4
gpt4 key购买 nike

我用作 image.png 的图像是:

enter image description here

当使用 254 运行我的程序时,它可以运行并且输出是:

enter image description here

这是我的代码。如果我将 254 更改为 255,输出文件将完全为空(大小为 0 字节):

package main

import "fmt"
import "os"
import "bufio"
import "image/png"
import "image"

func main() {
f, _ := os.Open("image.png")
im, _ := png.Decode(bufio.NewReader(f))
img := im.(*image.RGBA)
s := img.Bounds().Size()
w := s.X
h := s.Y
fmt.Println(w, h)
newPix := make([]uint8, len(img.Pix))
iy := 0
for ; iy < h; iy++ {
ix := 0
for ; ix < w; ix++ {
i := img.PixOffset(ix, iy)
r := img.Pix[i+0]
g := img.Pix[i+1]
b := img.Pix[i+2]
a := img.Pix[i+3]
var max uint8 = 254 /*255*/
newPix[i+0] = uint8(max - r)
newPix[i+1] = uint8(max - g)
newPix[i+2] = uint8(max - b)
newPix[i+3] = uint8(max - a)
}
}
newImg := image.NewRGBA(img.Bounds())
newImg.Pix = newPix
o, _ := os.Create("out.png")
defer o.Close()
png.Encode(bufio.NewWriter(o), newImg)
fmt.Println("DONE")
}

为什么会这样,我该如何解决? 255 仍然是 uint8,所以它应该可以工作...

最佳答案

我找到了 a discussion on the golang-nuts group这个问题以前在哪里出现过。

基本上是输出太小,自动触发writer flush。手动刷新编写器(在任何情况下都推荐)可以解决此问题。

package main

import "fmt"
import "os"
import "bufio"
import "image/png"
import "image"

func main() {
f, _ := os.Open("image.png")
im, _ := png.Decode(bufio.NewReader(f))
img := im.(*image.RGBA)
s := img.Bounds().Size()
w := s.X
h := s.Y
fmt.Println(w, h)
newPix := make([]uint8, len(img.Pix))
iy := 0
for ; iy < h; iy++ {
ix := 0
for ; ix < w; ix++ {
i := img.PixOffset(ix, iy)
r := img.Pix[i+0]
g := img.Pix[i+1]
b := img.Pix[i+2]
a := img.Pix[i+3]
var max uint8 = 255
newPix[i+0] = uint8(max - r)
newPix[i+1] = uint8(max - g)
newPix[i+2] = uint8(max - b)
newPix[i+3] = uint8(max - a)
}
}
newImg := image.NewRGBA(img.Bounds())
newImg.Pix = newPix
o, _ := os.Create("out.png")
defer o.Close()
writer := bufio.NewWriter(o)
png.Encode(writer, newImg)
writer.Flush()
fmt.Println("DONE")
}

有关忽略错误的一般注意事项适用。

关于image - Golang PNG 颜色操作不会达到 255,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22109346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com