I reorganized the code and found that the issue was caused by the 
dependency library “github.com/chai2010/webp” having a higher priority than 
“golang.org/x/image/webp,” and its decoder incorrectly decoded the image 
into incorrect RGBA values (e.g., R: 100, G: 150, B: 200, A: 0).

Thank you for your clarification, which has given me a deeper understanding 
of RGBA and NRGBA.

在2025年8月22日星期五 UTC+8 06:04:08<Kevin Chowski> 写道:

> The docs for color.RGBA mention: "An alpha-premultiplied color component C 
> has been scaled by alpha (A), so has valid values 0 <= C <= A.", so I 
> believe "color.RGBA{R: 100, G: 150, B: 200, A: 0}" is an invalid value. 
> Perhaps you have non-alpha-premultiplied colors? Using RGBA.Set with an 
> NRGBA value seems to work as I expect (https://go.dev/play/p/OjzdswX-lk_L), 
> same with just using an image.NRGBA in the first place (
> https://go.dev/play/p/VEvsKjh8lNU)
> On Wednesday, August 20, 2025 at 10:25:39 PM UTC-6 SugarMGP wrote:
>
>> func main(){
>> src := image.NewRGBA(image.Rect(0, 0, 2, 2))
>> src.SetRGBA(0, 0, color.RGBA{R: 100, G: 150, B: 200, A: 0})
>>
>> dst := image.NewRGBA(src.Bounds())
>> draw.Draw(dst, dst.Bounds(), &image.Uniform{color.White}, image.Point{}, 
>> draw.Src)
>> draw.Draw(dst, dst.Bounds(), src, image.Point{}, draw.Over)
>>
>> r, g, b, a := dst.At(0, 0).RGBA()
>> fmt.Printf("Pixel (0,0) RGBA: %d %d %d %d\n", r>>8, g>>8, b>>8, a>>8)
>> }
>>
>> result: Pixel (0,0) RGBA: 100 150 200 255
>>
>> However, when I tried to blend a transparent pixel onto a white 
>> background, the result was not white, which is what really confused me.
>> 在2025年8月21日星期四 UTC+8 07:10:20<Rob Pike> 写道:
>>
>>> This is correct behavior. The original pixel has value (100, 150, 200, 
>>> 0) and you use the Src operator, which copies the source to the destination 
>>> unmodified.
>>>
>>> -rob
>>>
>>>
>>> On Thu, Aug 21, 2025 at 4:55 AM SugarMGP <a2350...@gmail.com> wrote:
>>>
>>>> Hi all,
>>>>
>>>> I recently encountered an issue when using Go’s standard library 
>>>> image/draw. Specifically, I found that fully transparent pixels (alpha = 
>>>> 0) 
>>>> sometimes retain non-zero RGB values. This can cause unexpected colors 
>>>> when 
>>>> compositing the image onto a white background.
>>>>
>>>> *Here is a minimal reproducible example:*
>>>>
>>>> func main() {
>>>>     // Create a source image with a fully transparent pixel
>>>>     src := image.NewRGBA(image.Rect(0, 0, 2, 2))
>>>>     src.SetRGBA(0, 0, color.RGBA{R: 100, G: 150, B: 200, A: 0}) // 
>>>> fully transparent
>>>>
>>>>     dst := image.NewRGBA(src.Bounds())
>>>>     draw.Draw(dst, dst.Bounds(), src, image.Point{}, draw.Src)
>>>>
>>>>     r, g, b, a := dst.At(0, 0).RGBA()
>>>>     fmt.Printf("Pixel (0,0) RGBA: %d %d %d %d\n", r>>8, g>>8, b>>8, 
>>>> a>>8)
>>>> }
>>>>
>>>> *Output:*
>>>>
>>>> Pixel (0,0) RGBA: 100 150 200 0
>>>>
>>>> As you can see, even though alpha is 0, the RGB channels retain their 
>>>> original values. This causes issues when you try to composite the image 
>>>> onto a white background, because these “dirty” RGB values can show up in 
>>>> certain blending scenarios.
>>>>
>>>> In my code, I wrote a manual loop to premultiply or blend alpha into 
>>>> white, which works correctly. But using draw.Draw, these transparent 
>>>> pixels 
>>>> keep their original RGB values.
>>>>
>>>> My questions are:
>>>>
>>>>    - 
>>>>    
>>>>    Is this the intended behavior of image/draw?
>>>>    - 
>>>>    
>>>>    Or is this a bug (or at least a usability issue) in the standard 
>>>>    library that should be fixed?
>>>>    
>>>> Thank you very much for your opinions and insights!
>>>>
>>>> *Note:* My English is not very good, so I used an LLM to translate 
>>>> this post.
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "golang-nuts" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to golang-nuts...@googlegroups.com.
>>>> To view this discussion visit 
>>>> https://groups.google.com/d/msgid/golang-nuts/9b7cb846-622c-44c1-9e9b-87ff8ee7453fn%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/golang-nuts/9b7cb846-622c-44c1-9e9b-87ff8ee7453fn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/f1e9511f-5f77-4a3e-a86b-be53a458d7ebn%40googlegroups.com.

Reply via email to