Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image Golang PNG颜色操纵赢得';不能达到255_Image_Image Processing_Go - Fatal编程技术网

Image Golang PNG颜色操纵赢得';不能达到255

Image Golang PNG颜色操纵赢得';不能达到255,image,image-processing,go,Image,Image Processing,Go,我用作image.png的图像是: 使用254运行我的程序时,它工作正常,输出为: 这是我的密码。如果将254更改为255,则输出文件将完全为空(大小为0字节): 主程序包 输入“fmt” 导入“操作系统” 输入“bufio” 导入“图像/png” 导入“图像” func main(){ f、 _u:=os.Open(“image.png”) im,:=png.Decode(bufio.NewReader(f)) img:=im.(*image.RGBA) s:=img.Bounds().S

我用作image.png的图像是:

使用254运行我的程序时,它工作正常,输出为:

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

主程序包
输入“fmt”
导入“操作系统”
输入“bufio”
导入“图像/png”
导入“图像”
func main(){
f、 _u:=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(宽、高)
newPix:=make([]uint8,len(img.Pix))
iy:=0
对于;iy

这是为什么?我如何修复它?255仍然是uint8,因此它应该可以工作…

我认为尝试以您现在的方式更改alpha通道是一个错误。如果成功,将每个透明部分设置为可见,并将每个可见部分设置为透明,这将使图像看起来像废话

因此,请尝试将您的
newPix[i+3]
行替换为:

newPix[i+3] = a
我发现这个问题以前在哪里出现过

基本上,输出太小,无法自动触发写入程序刷新。手动刷新写入程序(在任何情况下都建议)可修复此问题

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")
}
主程序包
输入“fmt”
导入“操作系统”
输入“bufio”
导入“图像/png”
导入“图像”
func main(){
f、 _u:=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(宽、高)
newPix:=make([]uint8,len(img.Pix))
iy:=0
对于;iy

关于忽略错误的一般警告适用。

@pauljz图像不是空的,因为使用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 = 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")
}