Bug 447211

Summary: something strange happens after I have updated my version of Krita to 5.0.0 Beta 5 , it seems as if instead of blurring, the brush generates a pixelated effect in the image
Product: [Applications] krita Reporter: Gin <96ginette>
Component: * UnknownAssignee: Dmitry Kazakov <dimula73>
Status: RESOLVED FIXED    
Severity: normal CC: griffinvalley, rafaela.gumi
Priority: NOR Keywords: regression
Version: 5.0.0-beta5   
Target Milestone: ---   
Platform: unspecified   
OS: Microsoft Windows   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Gin 2021-12-18 23:23:38 UTC
RESUME
problems with blur brushes, particularly the WaterC Water Patter brush

STEPS TO PLAYBACK
1.open the program
2.Open file with CMYK color profile
3.use the WaterC Water Patter brush (or other blur brushes) on the already applied color

OBSERVED RESULT
the brush generates a pixelated effect in the image, in addition to modifying the tone of the image by adding shades that do not match the previously selected colors

EXPECTED RESULT
In theory, this brush (or others with blurring or defocusing properties) should generate a gradient and mix the colors in the image in an organic way, similar to a watercolor painting or a drawing made in pastel chalk.


SOFTWARE / OS VERSIONS
Windows: 5.0.0 Beta 5
Comment 1 wolthera 2021-12-18 23:40:52 UTC
I could confirm this. No idea if we'll be able to fix it before release though. It happens with all color smudge brushes, regardless of settings. It does not happen with filter, deform, or clone brushes, and mypaint's color smudge brushes are disabled for CMYK.

It seems like pixels with 0 opacity aren't being considered fully transparent, meaning everything gets a little bit of very transparent black (which is weird because in cmyk 0,0,0,0,0 is transparent white) added. Another possibility might be color conversion going wrong, but my money is on the transparency being mucked up.

I'm assigning Dmitry, as this is his area.
Comment 2 Dmitry Kazakov 2021-12-20 09:10:41 UTC
Is it actually a 'crash'-level bug?
Comment 3 Dmitry Kazakov 2021-12-20 13:09:34 UTC
The bug is fixed in https://invent.kde.org/graphics/krita/-/commit/7ebdbdba818fd17c23b3d62475676c183da622ba

Though I'll be released only in 5.0.1
Comment 4 Dmitry Kazakov 2021-12-20 15:09:12 UTC
Git commit e1828f1caefd03175ad26862f8129afe52998027 by Dmitry Kazakov.
Committed on 20/12/2021 at 13:08.
Pushed by dkazakov into branch 'krita/5.0'.

Rename KoOptimized{Rgb,}PixelDataScalerU8ToU16Base

This class is now also used for CMYK channel scaling, so the name
should also be andjusted.
(cherry picked from commit 8d3bd3dcc2946efb6dcb21555c94a46de78a5546)

M  +4    -4    libs/image/KisOverlayPaintDeviceWrapper.cpp
M  +4    -4    libs/pigment/CMakeLists.txt
R  +7    -7    libs/pigment/KoOptimizedPixelDataScalerU8ToU16.h [from: libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16.h - 094% similarity]
A  +22   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16Base.cpp     [License: GPL(v2.0+)]
R  +9    -9    libs/pigment/KoOptimizedPixelDataScalerU8ToU16Base.h [from: libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Base.h - 076% similarity]
A  +22   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16Factory.cpp     [License: GPL(v2.0+)]
A  +24   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16Factory.h     [License: GPL(v2.0+)]
A  +17   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16FactoryImpl.cpp     [License: GPL(v2.0+)]
A  +23   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16FactoryImpl.h     [License: GPL(v2.0+)]
D  +0    -22   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Base.cpp
D  +0    -22   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Factory.cpp
D  +0    -30   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Factory.h
D  +0    -17   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16FactoryImpl.cpp
D  +0    -23   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16FactoryImpl.h

https://invent.kde.org/graphics/krita/commit/e1828f1caefd03175ad26862f8129afe52998027
Comment 5 Dmitry Kazakov 2021-12-20 15:09:13 UTC
Git commit c48e2754d28d7b33388d8897591f3c52fe684093 by Dmitry Kazakov.
Committed on 20/12/2021 at 12:54.
Pushed by dkazakov into branch 'master'.

Fix artifacts when using colorsmudge brush over CMYK image

The problem is that we cannot rely on LCMS' conversions between
CMYK-U8 and CMYK-U16. They cannot do proper round-tripping, the
color fluctuates a lot, therefore causing artifacts.

To workaround this issue we can just offload all these conversions
to KoOptimizedRgbPixelDataScalerU8ToU16 (which now supports varying
number of channels in the pixel).

M  +8    -0    libs/image/KisOverlayPaintDeviceWrapper.cpp
M  +8    -2    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16.h
M  +11   -0    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Base.cpp
M  +7    -0    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Base.h
M  +7    -1    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Factory.cpp
M  +8    -0    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Factory.h
M  +2    -2    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16FactoryImpl.cpp
M  +37   -0    libs/pigment/tests/TestColorConversionSystem.cpp
M  +2    -0    libs/pigment/tests/TestColorConversionSystem.h

https://invent.kde.org/graphics/krita/commit/c48e2754d28d7b33388d8897591f3c52fe684093
Comment 6 Dmitry Kazakov 2021-12-20 15:09:21 UTC
Git commit 7ebdbdba818fd17c23b3d62475676c183da622ba by Dmitry Kazakov.
Committed on 20/12/2021 at 13:08.
Pushed by dkazakov into branch 'krita/5.0'.

Fix artifacts when using colorsmudge brush over CMYK image

The problem is that we cannot rely on LCMS' conversions between
CMYK-U8 and CMYK-U16. They cannot do proper round-tripping, the
color fluctuates a lot, therefore causing artifacts.

To workaround this issue we can just offload all these conversions
to KoOptimizedRgbPixelDataScalerU8ToU16 (which now supports varying
number of channels in the pixel).
(cherry picked from commit c48e2754d28d7b33388d8897591f3c52fe684093)

M  +8    -0    libs/image/KisOverlayPaintDeviceWrapper.cpp
M  +8    -2    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16.h
M  +11   -0    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Base.cpp
M  +7    -0    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Base.h
M  +7    -1    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Factory.cpp
M  +8    -0    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Factory.h
M  +2    -2    libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16FactoryImpl.cpp
M  +37   -0    libs/pigment/tests/TestColorConversionSystem.cpp
M  +2    -0    libs/pigment/tests/TestColorConversionSystem.h

https://invent.kde.org/graphics/krita/commit/7ebdbdba818fd17c23b3d62475676c183da622ba
Comment 7 Dmitry Kazakov 2021-12-20 15:09:29 UTC
Git commit 8d3bd3dcc2946efb6dcb21555c94a46de78a5546 by Dmitry Kazakov.
Committed on 20/12/2021 at 13:06.
Pushed by dkazakov into branch 'master'.

Rename KoOptimized{Rgb,}PixelDataScalerU8ToU16Base

This class is now also used for CMYK channel scaling, so the name
should also be andjusted.

M  +4    -4    libs/image/KisOverlayPaintDeviceWrapper.cpp
M  +4    -4    libs/pigment/CMakeLists.txt
R  +7    -7    libs/pigment/KoOptimizedPixelDataScalerU8ToU16.h [from: libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16.h - 094% similarity]
A  +22   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16Base.cpp     [License: GPL(v2.0+)]
R  +9    -9    libs/pigment/KoOptimizedPixelDataScalerU8ToU16Base.h [from: libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Base.h - 076% similarity]
A  +22   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16Factory.cpp     [License: GPL(v2.0+)]
A  +24   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16Factory.h     [License: GPL(v2.0+)]
A  +17   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16FactoryImpl.cpp     [License: GPL(v2.0+)]
A  +23   -0    libs/pigment/KoOptimizedPixelDataScalerU8ToU16FactoryImpl.h     [License: GPL(v2.0+)]
D  +0    -22   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Base.cpp
D  +0    -22   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Factory.cpp
D  +0    -30   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16Factory.h
D  +0    -17   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16FactoryImpl.cpp
D  +0    -23   libs/pigment/KoOptimizedRgbPixelDataScalerU8ToU16FactoryImpl.h

https://invent.kde.org/graphics/krita/commit/8d3bd3dcc2946efb6dcb21555c94a46de78a5546
Comment 8 wolthera 2022-01-30 13:05:09 UTC
*** Bug 449364 has been marked as a duplicate of this bug. ***