RFR: 8315113: Print request Chromaticity.MONOCHROME attribute does not work on macOS

Andrey Turbanov aturbanov at openjdk.org
Wed Nov 13 19:59:46 UTC 2024


On Wed, 6 Nov 2024 14:15:44 GMT, GennadiyKrivoshein <duke at openjdk.org> wrote:

> This update allows users to print with grayscale using color printers.
> Actually, it is not possible to use the "Monochrome" option from the "Color Appearance" panel. Also Chromaticity.MONOCHROME can't be used to print grayscale on color printers ([JDK-8315113](https://bugs.openjdk.org/browse/JDK-8315113)).
> 
> **Fix description**
> When a printer supports color printing and a user adds Chromaticity.MONOCHROME attribute to a PrintRequestAttributeSet, then the final printing raster is transformed to the grayscale color using java.awt.image.ColorConvertOp. When the job is a PostScript job, then the "setColor" and "setPaint" methods of the Graphics are overridden, and user colors (paints) are transformed to the grayscale form using the new proxy class GrayscaleProxyGraphics2D.
> 
> This approach is assumed to be platform, CUPS, and IPP protocol independent.
> 
> **Tests**
> The fix was tested on Ubuntu 22.04 and MacOS 12.6.1.

src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java line 802:

> 800:                     g2.dispose();
> 801:                     monochromeConverter.filter(bufferedImage, bufferedImage);
> 802:                     pathGraphics.drawImage(bufferedImage, null, 0,0);

Suggestion:

                    pathGraphics.drawImage(bufferedImage, null, 0, 0);

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21930#discussion_r1839519030


More information about the client-libs-dev mailing list