Skip to content

Commit

Permalink
LazyImageRendererContext implemented
Browse files Browse the repository at this point in the history
this speeds up rendering if paintImage is called before any other
drawing
  • Loading branch information
copierrj committed Jan 10, 2015
1 parent 851a9fc commit 469318e
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,15 @@ private ImageRenderContext( RenderingInfo info, BufferedImage image, Graphics2D
this.format = info.getFormat();
}

public static RenderContext createInstance( RenderingInfo info, BufferedImage image, OutputStream outputStream ) {
return new ImageRenderContext( info, image, image.createGraphics(), outputStream );
}

public static RenderContext createInstance( RenderingInfo info, OutputStream outputStream ) {
BufferedImage image = ImageUtils.prepareImage( info.getFormat(), info.getWidth(), info.getHeight(), info.getTransparent(),
info.getBgColor() );

return new ImageRenderContext( info, image, image.createGraphics(), outputStream );
return createInstance( info, image, outputStream);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package org.deegree.rendering.r2d.context;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;

import org.deegree.rendering.r2d.LabelRenderer;
import org.deegree.rendering.r2d.RasterRenderer;
import org.deegree.rendering.r2d.Renderer;
import org.deegree.rendering.r2d.TextRenderer;
import org.deegree.rendering.r2d.TileRenderer;

public class LazyImageRenderContext implements RenderContext {

private RenderContext renderContext;

private final RenderingInfo info;

private final OutputStream outputStream;

public LazyImageRenderContext( RenderingInfo info, OutputStream outputStream ) {
this.info = info;
this.outputStream = outputStream;
}

public RenderContext getRenderContext() {
if(renderContext == null) {
renderContext = ImageRenderContext.createInstance( info, outputStream );
}

return renderContext;
}

@Override
public Renderer getVectorRenderer() {
return getRenderContext().getVectorRenderer();
}

@Override
public TextRenderer getTextRenderer() {
return getRenderContext().getTextRenderer();
}

@Override
public LabelRenderer getLabelRenderer() {
return getRenderContext().getLabelRenderer();
}

@Override
public RasterRenderer getRasterRenderer() {
return getRenderContext().getRasterRenderer();
}

@Override
public TileRenderer getTileRenderer() {
return getRenderContext().getTileRenderer();
}

@Override
public void optimizeAndDrawLabels() {
getRenderContext().optimizeAndDrawLabels();

}

@Override
public void paintImage( BufferedImage img ) {
if(renderContext == null) {
renderContext = ImageRenderContext.createInstance( info, img, outputStream );
} else {
renderContext.paintImage( img );
}
}

@Override
public boolean close()
throws IOException {
return getRenderContext().close();
}

@Override
public void applyOptions( MapOptions options ) {
getRenderContext().applyOptions( options );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
import java.util.Collection;
import java.util.HashSet;

import org.deegree.rendering.r2d.context.ImageRenderContext;
import org.deegree.rendering.r2d.context.LazyImageRenderContext;
import org.deegree.rendering.r2d.context.RenderContext;
import org.deegree.rendering.r2d.context.RenderingInfo;
import org.deegree.rendering.r2d.context.SvgRenderContext;
Expand All @@ -65,7 +65,7 @@ public RenderContext getRenderers( RenderingInfo info, OutputStream outputStream
if ( "image/svg+xml".equals( info.getFormat () ) ) {
return SvgRenderContext.createInstance( info, outputStream );
} else {
return ImageRenderContext.createInstance( info, outputStream );
return new LazyImageRenderContext( info, outputStream );
}
}

Expand Down

0 comments on commit 469318e

Please sign in to comment.