package com.jogamp.opengl.test.junit.jogl.awt; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.lang.reflect.InvocationTargetException; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.SwingUtilities; /** * Manual test for BufferedImage behavior w/ OSX HiDPI pixel scale usage. */ public class ManualHiDPIBufferedImage01AWT { static final int width = 200; static final int height = 100; public static void main(final String[] args) throws InterruptedException, InvocationTargetException { final JFrame frame = new JFrame(); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { final Image image1 = getImage(getCheckBox("High-DPI (no)", false), width, height, 1); final Image image2 = getImage(getCheckBox("High-DPI (yes)", true), width, height, 2); System.err.println("Image1: "+image1); System.err.println("Image2: "+image2); @SuppressWarnings("serial") final Canvas canvas = new Canvas() { @Override public void paint(final Graphics g) { super.paint(g); g.drawImage(image1, 0, 0, width, height, this); g.drawImage(image2, 0, height + 5, width, height, this); } }; frame.getContentPane().add(getCheckBox("High-DPI (ref)", false), BorderLayout.NORTH); frame.getContentPane().add(canvas, BorderLayout.CENTER); frame.setBounds((1440-400)/2, 100, 400, 400); frame.validate(); frame.setVisible(true); } }); } static JCheckBox getCheckBox(final String text, final boolean selected) { final JCheckBox checkBox = new JCheckBox(text); checkBox.setSelected(selected); checkBox.setSize(new Dimension(width, height)); return checkBox; } static Image getImage(final JComponent component, final int width, final int height, final int scale) { final BufferedImage image = new BufferedImage(width*scale, height*scale, BufferedImage.TYPE_INT_ARGB); final Graphics g = image.getGraphics(); ((Graphics2D) g).scale(scale, scale); component.paint(g); g.dispose(); return image; } }