在现有图像上方矩形,然后显示图像

时间:2013-06-18 13:10:16

标签: java image-processing zk

我目前正在研究由zkoss提供的zk框架,我能够在网页中显示图像,但我想在某些字段上放置红色矩形矩形。我正在尝试这个:

//在缓冲区上绘制矩形 private void drawRectangles(){

Graphics2D graphics = image.createGraphics();

Iterator iterator = setOfRectangles.iterator();
while(iterator.hasNext()) {
    Rectangle rect = (Rectangle)iterator.next();
    graphics.drawRoundRect(rect.x, rect.y, rect.height, rect.width, 5, 5);
}
graphics.dispose();

}

我在另一个对上传事件作出反应的方法中调用此方法。

我也在这个类中保存了up; loading图像。

但是这不起作用,如果我可以在绘制所有矩形之后如何获取图像然后我可以将该图像放在网页中,但我不知道如何实现这一点。 谢谢大家的阅读和回复。

2 个答案:

答案 0 :(得分:1)

就普通Java而言,要导出Graphics2D,您实际上希望从Graphics2D获取BufferedImage,并且您将BufferedImage写入文件。

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bi.createGraphics();
for(Rectangle rect : setOfRectangles) {
    graphics.drawRoundRect(rect.x, rect.y, rect.height, rect.width, 5, 5);
}
ImageIO.write(bi, "PNG", new File("myPicture.png"));

这与ZK无关,您可以在SO和其他地方找到大量参考资料。你最终会得到一个普通的图像文件,可以像往常一样用ZK显示。

那就是说,我建议采用另一种方法。根据您的具体用例,这可以使用纯CSS完成。 CSS-Tricks有一个很好的教程,标题为“Text Blocks Over Image”,它探讨了这个想法。您div中不需要任何文字,只需点击border,将background-color保留为transparent,然后根据需要进行定位。

答案 1 :(得分:0)

这就是我所做的和它的工作:

Graphics2D graphics = image.createGraphics();

Iterator iterator = setOfRectangles.iterator();
while(iterator.hasNext()) {
    Rectangle rect = (Rectangle)iterator.next();
    float thickness = 3.0F;
    Stroke stroke = graphics.getStroke();
    graphics.setStroke(new BasicStroke(thickness));

    graphics.drawRoundRect(rect.x, rect.y, rect.height, rect.width, 5, 5);
    graphics.setStroke(stroke);
    graphics.setColor(Color.RED);
}

wholeImage.setContent(image);
graphics.dispose();

执行此操作后,将整个图像加载到