Bug 451629

Summary: Greyscale Layers have incorrect peak white display.
Product: [Applications] krita Reporter: Ahab Greybeard <ahab.greybeard>
Component: Color modelsAssignee: Krita Bugs <krita-bugs-null>
Status: RESOLVED FIXED    
Severity: normal CC: dimula73
Priority: NOR    
Version First Reported In: nightly build (please specify the git hash!)   
Target Milestone: ---   
Platform: Debian stable   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Ahab Greybeard 2022-03-17 17:49:07 UTC
SUMMARY
This problem is not in the 5.0.2 or previous versions.
It has been introduced in the 5.1.0-prealpha and the 5.0.2-alpha (Stable/Plus) and is being reported for the Mar 16 5.1.0-prealpha (git df3e78e899) appimage on Debian 10.

If a Greyscale/Alpha layer is created by any means and maximum white is painted on the layer, the colour shown is a mid-dark grey colour of about 30% in appearance.
However, the Colour Sampler Tool says this is Grey 255, Alpha 255
The Specific Colour Selector shows it as RGB = 80, 80, 80.
All shades of grey that are less than peak white are correctly presented.

Using the Specific Colour Selector to choose an RGB colour, for painting on a Greyscale layer, shows the following behaviour:

RGB = 255, 255, 255 gives the 30% grey colour that corresponds to RGB = 80, 80, 80

If Green is reduced to 254 (with Red, Blue = 255, 255) then the correct shade of white is painted.
If Red or Blue are reduced to 254 (with Green = 255), fake grey is painted.

If Green is kept at 255 and Red, Blue are set to 253, 253, then the correct shade of white is painted.

If the peak white 'fake grey' is painted over a different shade of grey then a white outline appears at the edge of the stroke even if anti-aliasing of the brush is turned off.
This is not affected by the Canvas Graphics Acceleration or the Scaling Mode.

Converting the layer to RGB/A 8-bit results in the peak white 'fake grey' remaining grey but slightly lighter as RGB = 85,85,85.

The same thing is seen if a Transparency Mask with peak white on it is converted to a Paint Layer or if an RGB layer with peak white on it is converted to Greyscale/Alpha.

Similar behaviour is shown for 16-bit integer colour spaces but the fake grey is a slightly lighter shade.


STEPS TO REPRODUCE
See Summary

OBSERVED RESULT
See Summary

EXPECTED RESULT
Peak white should display as peak white and be preserved as that during Colour Space conversion.

SOFTWARE/OS VERSIONS
Krita

 Version: 5.1.0-prealpha (git df3e78e)
 Languages: en_GB, en, en, en_GB, en
 Hidpi: false

Qt

  Version (compiled): 5.12.12
  Version (loaded): 5.12.12

OS Information

  Build ABI: x86_64-little_endian-lp64
  Build CPU: x86_64
  CPU: x86_64
  Kernel Type: linux
  Kernel Version: 4.19.0-18-amd64
  Pretty Productname: Debian GNU/Linux 10 (buster)
  Product Type: debian
  Product Version: 10
  Desktop: MATE

OpenGL Info
 
  Vendor:  "NVIDIA Corporation" 
  Renderer:  "GeForce GTX 750 Ti/PCIe/SSE2" 
  Version:  "4.6.0 NVIDIA 460.73.01" 
  Shading language:  "4.60 NVIDIA" 
  Requested format:  QSurfaceFormat(version 3.0, options QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::CompatibilityProfile) 
  Current format:  QSurfaceFormat(version 4.6, options QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::CompatibilityProfile) 
     Version: 4.6
     Supports deprecated functions true 
     is OpenGL ES: false 
  supportsBufferMapping: true 
  supportsBufferInvalidation: true 

ADDITIONAL INFORMATION
Comment 1 Ahab Greybeard 2022-03-17 17:54:50 UTC
Extra Observation: This doesn't happen for 16-bit float and 32-bit float images.
Comment 2 Dmitry Kazakov 2022-03-29 11:03:22 UTC
Hi, Ahab!

Thank you for the report! The bug was in the version of LCMS we used. I have updated it and started new builds today. So, tomorrow's nightly builds should have this bug fixed! :)