Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 渲染到BuffereImage时,Apache poi将丢失形状质量_Java_Apache Poi_Rendering_Bufferedimage - Fatal编程技术网

Java 渲染到BuffereImage时,Apache poi将丢失形状质量

Java 渲染到BuffereImage时,Apache poi将丢失形状质量,java,apache-poi,rendering,bufferedimage,Java,Apache Poi,Rendering,Bufferedimage,我有一个幻灯片,幻灯片上有一些简单的形状。我正在用Apache Poi加载它: XMLSlideShow ppt = MY_SLIDE_SHOW; for (XSLFSlide slide: ppt.getSlides()) { List<XSLFShape> shapeList = slide.getShapes(); for (XSLFShape shape: shapeList) { // data about shape dime

我有一个幻灯片,幻灯片上有一些简单的形状。我正在用Apache Poi加载它:

XMLSlideShow ppt = MY_SLIDE_SHOW;

for (XSLFSlide slide: ppt.getSlides()) {

     List<XSLFShape> shapeList = slide.getShapes();

     for (XSLFShape shape: shapeList) {

         // data about shape dimensions
         Rectangle2D anchor = shape.getAnchor();

         // buffered image to draw into
         BufferedImage img = new BufferedImage((int)anchor.getWidth(), (int)anchor.getHeight(), BufferedImage.TYPE_INT_RGB);
         Graphics2D graphics = img.createGraphics();

         // set a clear transparent background to the image
         graphics.setComposite(AlphaComposite.Clear);
         graphics.fillRect(0, 0, (int)anchor.getWidth(), (int)anchor.getHeight());

         // draw the shape into the buffered image
         graphics.setComposite(AlphaComposite.Src);
         shape.draw(graphics, new Rectangle(0, 0, (int)anchor.getWidth(), (int)anchor.getHeight()));
         graphics.dispose();
     }
}
xmlsideshow ppt=我的幻灯片放映;
对于(XSLFSlide幻灯片:ppt.getSlides()){
List shapeList=slide.getShapes();
for(XSLFShape形状:shapeList){
//关于形状尺寸的数据
矩形2D锚点=shape.getAnchor();
//要绘制到的缓冲图像
BuffereImage img=新的BuffereImage((int)anchor.getWidth(),(int)anchor.getHeight(),BuffereImage.TYPE_int_RGB);
Graphics2D graphics=img.createGraphics();
//为图像设置清晰透明的背景
图形.setComposite(AlphaComposite.Clear);
fillRect(0,0,(int)anchor.getWidth(),(int)anchor.getHeight());
//将形状绘制到缓冲图像中
graphics.setComposite(AlphaComposite.Src);
绘制(图形,新矩形(0,0,(int)anchor.getWidth(),(int)anchor.getHeight());
graphics.dispose();
}
}
但是,虽然我能够渲染形状,但它们的分辨率要低得多,并且会失去任何效果(光晕、倒角、3d格式、阴影、反射等)

下面是powerpoint(带效果)和渲染对象(无效果)的比较:

我认为,所需的解决方案可能有三个方面,因此希望您能回答以下问题:

  • 如何随形状一起渲染形状效果
  • 如何以高于面值的分辨率渲染形状,然后缩小比例(而不是像目前这样以较低的分辨率放大)
  • 如何渲染透明背景的形状,这让我很惊讶,但目前还不能工作

谢谢大家!

我负责POI幻灯片的渲染。w、 r.t.你的问题是:a)形状效果尚未实现。b) idk你的意思是,你可以,c)有些情况下,背景是不透明的。如果你想部分解决这个问题,请打开一个文件夹并附上你的文件。谢谢你的评论!非常感谢!w、 r.t->a)好的,b)我会看看这是否解决了我的形状的质量问题。c) 好的。我正在处理POI幻灯片的渲染。w、 r.t.你的问题是:a)形状效果尚未实现。b) idk你的意思是,你可以,c)有些情况下,背景是不透明的。如果你想部分解决这个问题,请打开一个文件夹并附上你的文件。谢谢你的评论!非常感谢!w、 r.t->a)好的,b)我会看看这是否解决了我的形状的质量问题。c) 行。