ベクトルデータだけでなくラスタも含むスケーリングされたオブジェクトを描画したいと思います。現在、私はスケールGraphics2Dオブジェクト残念ながらJava:スケーリングされたオブジェクトを描く(バッファ付きイメージとベクトルグラフィックス)
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
//Get transformation, apply scale and shifts
at = g2d.getTransform();
at.translate(x, y);
at.scale(zoom, zoom);
//Transform Graphics2D object
g2d.setTransform(at);
//Draw buffered image into the transformed object
g2d.drawImage(img, 0, 0, this);
//Draw line into transformed Graphics2D object
Line2D.Double line = new Line2D.Double();
line.x1 = (int)p1.getX();
line.y1 = (int)p1.getY();
line.x2 = (int)p2.getX();
line.y2 = (int)p2.getY();
g2d.draw(line);
g2d.dispose();
}
に描いています、このアプローチはいくつかの欠点を持っている(ストローク幅、ズーム画像のより悪い品質に影響を与えます)。
代わりに、スケールされたオブジェクトを描画したいと思います。ベクトルデータのために、このアプローチは単純である:ただし
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
//Update affine transformation
at = AffineTransform.getTranslateInstance(x, y);
at = AffineTransform.getScaleInstance(zoom, zoom);
//Transform line and draw
Line2D.Double line = new Line2D.Double();
line.x1 = (int)p1.getX();
line.y1 = (int)p1.getY();
line.x2 = (int)p2.getX();
line.y2 = (int)p2.getY();
g2d.draw(at.createTransformedShape((Shape)line));
//Transform buffered image and draw ???
g2d.draw(at.createTransformedShape((Shape)img)); //Error
g2d.dispose();
}
、Graphics2Dオブジェクトを再スケーリングすることなく、バッファリングされたイメージに変換を適用する方法?ラスター画像、ベクターシェイプとして理解することができないので、このアプローチは...あなたの助けのための
感謝を
g2d.draw(at.createTransformedShape((Shape)img));
を動作しません。
代わりに '// ERROR'でマークされている行の、あなたは' g2d.transformを(行うことができますat); g2d.drawImage(img、0、0、null); '。品質に問題がある場合は、Graphics2Dのレンダリングヒントを変更することを検討してください。 – Marco13