1

私のパネルは次のようになります:

ここに画像の説明を入力してください

画像に変換するとき

public BufferedImage createImage(JPanel panel) {

int w = (int) PageSize.A4.getWidth();//panel.getWidth();
int h = (int) PageSize.A4.getHeight();//panel.getHeight();

BufferedImage originalImage = new BufferedImage(panel.getHeight(), panel.getWidth(), BufferedImage.TYPE_BYTE_INDEXED);
Graphics2D gg = originalImage.createGraphics();
gg.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
        RenderingHints.VALUE_INTERPOLATION_BILINEAR);
gg.setRenderingHint(RenderingHints.KEY_RENDERING,
        RenderingHints.VALUE_RENDER_QUALITY);
gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);
panel.paint(gg);

BufferedImage resizedImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, w, h, null);
g.dispose();
g.setComposite(AlphaComposite.Src);

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
        RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING,
        RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);

return resizedImage;
}

それはひどいように見えます-大きくて悪い品質

ここに画像の説明を入力してください

この画像の品質をパネルの品質に変更するにはどうすればよいですか?

編集:

このコードをコンパイルするために必要なライブラリ:

import com.itextpdf.text.PageSize;
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
4

2 に答える 2

1

Graphics2D変換を使用すると、パネルのペイントがすぐに拡大縮小された画像に反映されます。

BufferedImage resizedImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = resizedImage.createGraphics();
g.transform(AffineTransform.getScaleInstance((float)panel.getWidth()/w,
          (float)panel.getHeight()/h));//this might need to be inverted I'm not sure...
panel.paint(g);
g.dispose();

ところで、グラフィックを破棄した後、setRenderingHintは何の役にも立ちません。

于 2012-04-28T19:27:45.057 に答える
1

文字通りあなたの質問に答えるには:

この画像の品質をパネルの品質に変更するにはどうすればよいですか?

シンプルで、画像のサイズを変更しないでください。これが品質低下の原因であるため、「画像をA4サイズに拡大する」全体をドロップします。

public BufferedImage createImage(JPanel panel) {
  BufferedImage originalImage = new BufferedImage(
        panel.getHeight(), panel.getWidth(), 
        BufferedImage.TYPE_BYTE_INDEXED);
  Graphics2D gg = originalImage.createGraphics();
  gg.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
        RenderingHints.VALUE_INTERPOLATION_BILINEAR);
  gg.setRenderingHint(RenderingHints.KEY_RENDERING,
        RenderingHints.VALUE_RENDER_QUALITY);
  gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);
  panel.paint(gg);
  gg.dispose();
  return originalImage;
}

しかし、これがあなたが探していたものであるかどうかはわかりません。画像を本当にA4サイズにしたい場合は、画像に変換する前に、パネルをA4サイズで鮮明にレンダリングすることをお勧めします。小さい画像を大きいバージョンに拡大すると、常に品質が低下します。

于 2012-04-28T20:21:43.547 に答える