[OpenJDK 2D-Dev] [2D-Dev] Review Request: JDK-8015070: Antialiased text on translucent backgrounds gets bright artifacts

Prahalad Kumar Narayanan prahalad.kumar.narayanan at oracle.com
Thu Mar 17 10:00:32 UTC 2016

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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20160317/8633e590/attachment.html>

More information about the 2d-dev mailing list