在我的一个项目中,我使用JUNG2可视化显示在applet中的非常大的多父级层次结构图。我需要将图形的全部/部分导出为高分辨率的静止图像,因为屏幕截图在打印时看起来很丑陋(特别是如果图形已经缩小)。
我当前使用的代码如下:
public void writeToDisk(File saveToFolder, String filename) {
//Dimension loDims = getGraphLayout().getSize();
Dimension vsDims = getSize();
int width = vsDims.width;
int height = vsDims.height;
Color bg = getBackground();
BufferedImage im = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
Graphics2D graphics = im.createGraphics();
graphics.setColor(bg);
graphics.fillRect(0,0, width, height);
paintComponent(graphics);
try{
ImageIO.write(im,"png",new File(saveToFolder,filename));
}catch(Exception e){
e.printStackTrace();
}
}
这会创建不是特别高分辨率的PNG图像。所以我的问题如下:
提前致谢,
感谢您的建议,但我设法使FreeHEP矢量图库以我想要的方式工作。如果有人遇到相同的问题,我将分享下面的代码。
上面提到的库具有一个非常不错的内置导出菜单,该菜单可处理多种不同格式的导出。修改后的“ ModelGraphMouse”类的代码摘录:
protected void handlePopup(MouseEvent e) {
final VisualizationViewer<MyNode, MyEdge> vv = (VisualizationViewer<MyNode, MyEdge>)e.getSource();
Point2D p = e.getPoint();
GraphElementAccessor<MyNode, MyEdge> pickSupport = vv.getPickSupport();
if(pickSupport != null) {
final MyNode v = pickSupport.getVertex(vv.getGraphLayout(), p.getX(), p.getY());
// if clicked on a vertex -> show info popup
// else show contexual menu
if(v != null) {
JFrame popup = new JFrame("Node: " + v.getId());
popup.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
...
} else{
JPopupMenu menu = new JPopupMenu();
JMenuItem exportGraphMenuItem = new JMenuItem("Export graph to vector image...");
exportGraphMenuItem.addActionListener(new ExportActionListener((WritingVisualizationViewer<V, E>) vv));
menu.add(exportGraphMenuItem);
menu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
和动作监听器:
public class ExportActionListener implements ActionListener{
private VisualizationViewer<V, E> wvv;
public ExportActionListener(VisualizationViewer<V, E> vv) {
this.wvv = vv;
}
@Override
public void actionPerformed(ActionEvent e) {
ExportDialog export = new ExportDialog();
export.showExportDialog(wvv, "Export view as ...", wvv, "export");
}
}
我看过使用PDFBox基于图像DPI提取图像的代码,如下所示 在上面的代码中,我可以指定图像分辨率(150),同时从pdf中提取图像。更高的分辨率,我得到更大的图像作为回报。 现在,我想反转它的意思是在将图像写入PDF时指定图像的分辨率/dpi,但下面的代码没有提供指定dpi的选项吗?有谁能指引我在哪里失踪 在将图像写入pdf时,请告诉我在哪里可以传递分辨率/DPI参数(因为图像大于pdf页面大小
问题内容: 我想将JPanel中的图像导出到矢量图形文件中,以便可以以高于屏幕的分辨率对其进行编辑和打印。本质上,我希望使用目标图形调用它的功能,该目标图形将绘图命令保存到矢量图形文件中。 有什么好的简单方法呢?推荐哪些库?哪种矢量格式最好,为什么? 问题答案: 看看Java EPS Graphics2D包。 许多Java程序都使用Graphics2D在屏幕上绘制内容,虽然很容易将输出另存为png
问题内容: 当网站输出到客户端时,我正在尝试优化网站的大小。缓存时,我分别只有1.9MB和29KB。问题在于,第一次加载包含的图像对于移动设备而言并未经过优化。它具有1080p分辨率。 因此,我正在寻找一种方法,该方法允许我首先加载低分辨率版本(),一旦网站加载完毕,请使用高分辨率版本- 甚至分辨率接近所用设备的分辨率版本(或只是) 。 就像每个人都期望的那样,使用CSS设置背景。它应用于主体,整
问题内容: 情况:我有一张图片,用户可以在上面添加文本,在其中更改颜色,大小,位置,旋转度,字体大小等,我需要将所有这些文本保存在一张图像中。没关系,我通过使用图形缓存保存它们。 问题:由于用户设备的屏幕尺寸,结果图像可能很小。我需要此图像的分辨率为1500-2000像素。如果仅调整此图像的大小,则文本看起来模糊并且不如在屏幕上显示的那样好。 问题:还有其他方法可以将文本视图另存为图像,而不仅仅是
在Java 9中,已经推出了一种新的多分辨率图像API,支持具有不同分辨率变体的多个图像。 该API允许将具有不同分辨率的一组图像用作单个多分辨率图像。 以下是多分辨率图像的主要操作。 - 获取一个特定的图像,这是最好的变体,以指定的尺寸表示这个逻辑图像。 - 获取所有分辨率变体的可读列表。 示例 执行上面示例代码,得到以下结果 -
我有一个java的列表。awt。图像,每个分辨率为300 DPI。我想打印它们,当我开始打印这些图像时(使用javax.PrintService API),只打印一些图像的一部分,因为Java的打印/3D类默认使用72DPI(相对于我的图像的300 DPI)。但是,当我使用72 DPI的图像(与Java默认值具有相同的分辨率)时,所有图像都可以很好地打印(打印整个图像时,而不仅仅是其中的一部分)。