You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2019/05/25 13:10:19 UTC

svn commit: r1859967 - /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java

Author: tilman
Date: Sat May 25 13:10:19 2019
New Revision: 1859967

URL: http://svn.apache.org/viewvc?rev=1859967&view=rev
Log:
PDFBOX-2941: prevent blurry display of type 3 glyph rendering on HiDPI screens, thanks Alexandr Scherbatiy (same as in issue 3665)

Modified:
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java?rev=1859967&r1=1859966&r2=1859967&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java Sat May 25 13:10:19 2019
@@ -17,7 +17,6 @@
 package org.apache.pdfbox.debugger.fontencodingpane;
 
 import javax.swing.BorderFactory;
-import javax.swing.ImageIcon;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
@@ -168,14 +167,17 @@ class FontEncodingView
                 return new JLabel(new HighResolutionImageIcon(
                                    bim, 
                                    (int) Math.ceil(bim.getWidth() / DEFAULT_TRANSFORM.getScaleX()), 
-                                   (int) Math.ceil(bim.getHeight() / DEFAULT_TRANSFORM.getScaleX())), 
+                                   (int) Math.ceil(bim.getHeight() / DEFAULT_TRANSFORM.getScaleY())), 
                                   SwingConstants.CENTER);
             }
             if (o instanceof BufferedImage)
             {
                 Rectangle cellRect = jTable.getCellRect(row, col, false);
                 BufferedImage glyphImage = (BufferedImage) o;
-                BufferedImage cellImage = new BufferedImage((int) cellRect.getWidth(), (int) cellRect.getHeight(), BufferedImage.TYPE_INT_RGB);
+                BufferedImage cellImage = new BufferedImage(
+                        (int) (cellRect.getWidth() * DEFAULT_TRANSFORM.getScaleX()),
+                        (int) (cellRect.getHeight() * DEFAULT_TRANSFORM.getScaleY()),
+                        BufferedImage.TYPE_INT_RGB);
                 Graphics2D g = (Graphics2D) cellImage.getGraphics();
                 g.setBackground(Color.white);
                 g.clearRect(0, 0, cellImage.getWidth(), cellImage.getHeight());
@@ -183,17 +185,20 @@ class FontEncodingView
                 double scale = 1 / (glyphImage.getHeight() / cellRect.getHeight());
 
                 // horizontal center
-                g.translate((cellRect.getWidth() - glyphImage.getWidth() * scale) / 2, 0);
+                g.translate((cellRect.getWidth() - glyphImage.getWidth() * scale) / 2 * DEFAULT_TRANSFORM.getScaleX(), 0);
 
                 // scale from the glyph to the cell
-                g.scale(scale, scale);
+                g.scale(scale * DEFAULT_TRANSFORM.getScaleX(), scale * DEFAULT_TRANSFORM.getScaleY());
 
                 g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
                 g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
                 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);              
                 g.drawImage(glyphImage, 0, 0, null);
                 g.dispose();
-                return new JLabel(new ImageIcon(cellImage));
+                return new JLabel(new HighResolutionImageIcon(
+                                   cellImage,
+                                   (int) Math.ceil(cellImage.getWidth() / DEFAULT_TRANSFORM.getScaleX()), 
+                                   (int) Math.ceil(cellImage.getHeight() / DEFAULT_TRANSFORM.getScaleY())));
             }
             if (o != null)
             {