[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