--- old/src/java.desktop/share/native/libawt/java2d/loops/ByteIndexed.h 2016-04-29 17:04:08.938631692 +0530 +++ new/src/java.desktop/share/native/libawt/java2d/loops/ByteIndexed.h 2016-04-29 17:04:08.726631692 +0530 @@ -43,7 +43,7 @@ jint *PREFIX ## Lut; #define DeclareByteIndexedStoreVars(PREFIX) \ - int PREFIX ## XDither, PREFIX ## YDither; \ + int PREFIX ## XDither, PREFIX ## YDither, PREFIX ## RepPrims; \ char *PREFIX ## rerr, *PREFIX ## gerr, *PREFIX ## berr; \ unsigned char *PREFIX ## InvLut; @@ -70,6 +70,7 @@ do { \ SetByteIndexedStoreVarsYPos(PREFIX, pRasInfo, (pRasInfo)->bounds.y1); \ PREFIX ## InvLut = (pRasInfo)->invColorTable; \ + PREFIX ## RepPrims = (pRasInfo)->representsPrimaries; \ } while (0) #define InitByteIndexedStoreVarsX(PREFIX, pRasInfo) \ @@ -168,9 +169,14 @@ #define StoreByteIndexedFrom3ByteRgb(pRas, PREFIX, x, r, g, b) \ do { \ - r += PREFIX ## rerr[PREFIX ## XDither]; \ - g += PREFIX ## gerr[PREFIX ## XDither]; \ - b += PREFIX ## berr[PREFIX ## XDither]; \ + if (!(((r == 0) || (r == 255)) && \ + ((g == 0) || (g == 255)) && \ + ((b == 0) || (b == 255)) && \ + PREFIX ## RepPrims)) { \ + r += PREFIX ## rerr[PREFIX ## XDither]; \ + g += PREFIX ## gerr[PREFIX ## XDither]; \ + b += PREFIX ## berr[PREFIX ## XDither]; \ + } \ ByteClamp3Components(r, g, b); \ (pRas)[x] = SurfaceData_InvColorMap(PREFIX ## InvLut, r, g, b); \ } while (0)