0
我想绘制包含光栅以及矢量数据的缩放对象。目前,我画成比例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(在); g2d.drawImage(img,0,0,null);'。如果您遇到质量问题,请考虑更改Graphics2D的渲染提示。 – Marco13