-1

I wrote codes that loads images into JEditorPane using HTMLEditorKit. I know how to resize the image using HTML. But the problem is the loaded image losses quality. I am trying to find ways to resize without losing quality.

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
Rahul
  • 289
  • 2
  • 7
  • Maybe like [this](http://stackoverflow.com/a/4216635/230513)? – trashgod Jul 03 '15 at 16:42
  • Well , I use insertHTML() method of htmlEditorKit . I need the image that JEditorPane shows , so that I can resize it. But I can't find how. – Rahul Jul 03 '15 at 16:47
  • load the image into BufferedImage and then resize as said in the linkby trashgod then put it to your htmlEditorkit – Madhan Jul 03 '15 at 20:26
  • 1
    *"I know how to resize the image using HTML."* Do you know how to resize an image smoothly using pure Java code? If not, see the advice of @trashgod. Once you've sorted that out, you'll need to extend the `HTMLEditorKit` and override the `public View create(Element element) ` method of the `HTMLFactory` to use the new functionality (based on what I was just looking at in an old project that added support for the `applet` element). – Andrew Thompson Jul 03 '15 at 22:56

2 Answers2

0

As Andrew Thompson suggested ,

extend the HTMLEditorKit and override public View create(Element element) of HTMLFactory .

extend from ImageView and override the public void paint(Graphics g, Shape a) method. Get the image and resize it.

getScaledInstance(WIDTH, HEIGHT, Image.SCALE_AREA_AVERAGING)

with your favourite scaling HINT and finally draw.

Rahul
  • 289
  • 2
  • 7
0

I'm unclear on the exact use-case the OP is after, but I've used the following simpler alternative for an HTML help viewer – override the paint() method of the JEditorPane to set a rendering hint:

        JEditorPane editor = new JEditorPane() {
            @Override public void paint(Graphics g) {
                if (g instanceof Graphics2D) {
                    Graphics2D g2 = (Graphics2D) g.create();
                    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                                        RenderingHints.VALUE_INTERPOLATION_BICUBIC);
                    super.paint(g2);
                    g2.dispose();
                } else {
                    // Print and other non-Graphics2D contexts.
                    super.paint(g);
                }
            }
        };

This provides nice and easy improvement with non-integral scaling factor hidpi screens, for example. The quality would still be suboptimal if an image is scaled more than half down of the original. For that use-case a custom HTMLEditorKit / HTMLVactory producing a custom ImageView would be necessary, as others have pointed out.