[Libreoffice-ux-advise] [Bug 156182] FORMATTING Automatic text color can be unreadable with darker cell colors

bugzilla-daemon at bugs.documentfoundation.org bugzilla-daemon at bugs.documentfoundation.org
Mon Jul 10 14:02:51 UTC 2023


https://bugs.documentfoundation.org/show_bug.cgi?id=156182

--- Comment #4 from Heiko Tietze <heiko.tietze at documentfoundation.org> ---
Created attachment 188297
  --> https://bugs.documentfoundation.org/attachment.cgi?id=188297&action=edit
Playground

Here is a macro to play with the various approaches. Not only the calculation
makes a difference but also the threshold. My personal favorite is the quick
and dirty #5.

We have two functions implemented, isDark() and isBright(), both taking the
luminance into account with thresholds <=62 and >=245 resp. In between is
neither dark nor bright and I cannot assess the implications (beside the
positive effect on all the isDark() cases).

Sub Main
        Doc = ThisComponent
        Sheets=Doc.Sheets
        Sheet=Sheets.getByName("sheet1")
        Dim aColor
        Dim aLum as Double

        Formula = 5

        for i = 0 to 11
         for j = 0 to 9
                Cell=sheet.getcellByposition(i,j)
                aColor = Cell.CellBackColor

                Select Case Formula 
                 Case 0 REM current implementation in color.hxx
                    aLum = (Red(aColor) * 76 + Green(aColor) * 151 +
Blue(aColor) * 29) / 256
                    Threshold = 62
                 Case 1 REM Photometric/digital ITU BT.709:
https://stackoverflow.com/questions/596216/formula-to-determine-perceived-brightness-of-rgb-color
                    aLum = Red(aColor) * 0.2126 + Green(aColor) * 0.7152 +
Blue(aColor) * 0.0722
                    Threshold = 150
                 Case 2 REM Digital ITU BT.601
                    aLum = Red(aColor) * 0.299 + Green(aColor) * 0.587 +
Blue(aColor) * 0.114
                    Threshold = 150
                 Case 3 REM http://alienryderflex.com/hsp.html
                    aLum = sqr( (Red(aColor)/255)^2 * 0.299 +
(Green(aColor)/255)^2 * 0.587 + (Blue(aColor)/255)^2 * 0.114 )
                    Threshold = 0.6
                 Case 4 REM Andy's Down and Dirty Version;
https://stackoverflow.com/questions/71410478/what-is-the-constant-k-in-calculating-the-luminance
                    aLum = sqr( (Red(aColor)/255)^2.2 * 0.2126 +
(Green(aColor)/255)^2.2 * 0.7152 + (Blue(aColor)/255)^2.2 * 0.0722 )
                    Threshold = 0.6
                 Case 5 REM https://www.w3.org/TR/AERT/#color-contrast
                        aLum = (Red(aColor) * 299 + Green(aColor) * 587 +
Blue(aColor) * 114) / 1000
                        Threshold = 150
        end select

                if (aLum > Threshold) then
                        Cell.CharColor = RGB(0,0,0)
                else   
                    Cell.CharColor = RGB(255,255,255)              
                end if   

         next j
        next i

End Sub

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Libreoffice-ux-advise mailing list