Hello Everyone on Java2D Group

 

Good day to you.

 

Herewith, I 'm sharing the webrev for two identical Java2D Bugs.

Bug ID : JDK-8015070

       Title     : Antialiased text on translucent backgrounds gets bright 
artifacts

       Link      : https://bugs.openjdk.java.net/browse/JDK-8015070

 

Bug ID : JDK-8013564 ( currently closed as duplicate )

       Title     : Font rendering anti-aliasing in translucent BufferedImages 
broken

       Link      : https://bugs.openjdk.java.net/browse/JDK-8013564

 

Webrev Link : http://cr.openjdk.java.net/~psadhukhan/prahlad/8015070/webrev.00/

 

Quick Summary on Bugs :

````````````````````````````````````````````````

1.  Artifacts appear on Edges of text characters when anti-aliased text is 
drawn on Translucent background

2.  The issue is reproducible on all platforms - windows, linux and mac os.

3.  Besides, the issue is reproduced with the commonly used pixel format- 
4ByteArgb.

 

Root Cause & Solution :

````````````````````````````````````````````````

1.  The Macro: GlyphListAABlend4ByteArgb in File: LoopMacros.h uses the 
standard blending algorithm

        dstColor = [ srcColor * glyphAlpha + dstColor * (1 - glyphAlpha) ] / 
dstAlpha

2.  The above equation works only when the srcColor and dstColor are Opaque.

 

3.  When srcColor and dstColor are Translucent, their alphaComponent will 
influence the visibility of the color, and visibility of the color below.

4.  The new set of calculations for blending Translucent source and destination 
colors is given as

        resAlpha = 1 - ((1 - srcAlpha) * (1 - dstAlpha))

        resColor = [ srcColor * srcAlpha + dstColor * dstAlpha * (1 - srcAlpha) 
] / resAlpha

5.  Reference text for the equation: 
https://en.wikipedia.org/wiki/Alpha_compositing

6.  With the above modification to the blending logic, the artifacts do not 
appear and issues are fixed.

 

Jtreg & Jprt Results :

````````````````````````````````````````````````

1.  A simple test-file: AADrawStringArtifact.java has been created to be a part 
of jtreg test cases.

         The test file is well commented to explain - nature of artifact and 
how the test tries to identify them.

         As required, the test case fails with Jdk 7, Jdk 8 and succeeds with 
Jdk 9-internal (built with changes for the bug fix)

 

2.  The changes to blending logic lies within java.desktop/src/share/native/... 

         Henceforth, JPRT was used to ensure successful build across all 
supported platforms

         Jprt Job Link : 
http://scaaa637.us.oracle.com//archive/2016/03/2016-03-17-072001.prahnara-linux.client

         The build succeeds on all platforms.

 

Kindly review the webrev link and provide your views and suggestions.

Webrev Link : http://cr.openjdk.java.net/~psadhukhan/prahlad/8015070/webrev.00/

 

If the changes look good, we could take up the changes for source checkin.

 

Thank you for your time in review

Have a good day

 

Prahalad N.

Reply via email to