如何从 java 中的非轻量级组件获取 BufferedImage?

Posted

技术标签:

【中文标题】如何从 java 中的非轻量级组件获取 BufferedImage?【英文标题】:How to get a BufferedImage from a non light weight Component in java? 【发布时间】:2011-04-21 09:55:48 【问题描述】:

我使用以下方法尝试从非轻量级组件中获取 BufferedImage,但是我得到了一个黑色图像,所以它不起作用,我传递给它的组件是来自 JDIC 的 WebBrowser 对象,它是一个非轻量级组件:

  public static BufferedImage getComponentImage(Component aComponent,Rectangle region) throws IOException
  
     BufferedImage image= new BufferedImage(aComponent.getWidth(),aComponent.getHeight(),BufferedImage.TYPE_INT_RGB);
     Graphics2D g2d=image.createGraphics();
     SwingUtilities.paintComponent(g2d,aComponent,aComponent.getParent(),region);
     g2d.dispose();
/*
     Graphics g = image.getGraphics();
     aComponent.paint(g);
  // aComponent.paintAll(g);
  // SwingUtilities.paintComponent(g,aComponent,aComponent.getParent(),region);
     g.dispose();
*/
     return image;
  

我也试过 cmets 中的线,它们也不起作用,那么如何在 java 中从 非轻量级组件 中捕获 BufferedImage 呢?

【问题讨论】:

【参考方案1】:

SwingUtilities.paintComponent 的文档说“如果组件不是轻量级的,就会发生糟糕的事情:崩溃、异常、绘画问题......”所以你的结果不会出乎意料。

CellRenderPane 似乎没有这样的限制:你可以试试。或者,您可以尝试直接在组件上调用 paint(),但这通常会出现问题,除非组件正确嵌入到组件层次结构中。

【讨论】:

谢谢,但就我而言,如何使用 CellRenderPane ?任何示例代码?

以上是关于如何从 java 中的非轻量级组件获取 BufferedImage?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Vue中的非父子组件之间共享数据

如何在Vue中的非父子组件之间共享数据

如何在Vue中的非父子组件之间共享数据

Java中的非阻塞异步IO

从Eclipse中的非插件库更新ProgressMonitor

如何从 blazor 中的子组件获取属性