@@ -71,35 +71,48 @@ public class JSVGRasterizer implements SVGRasterizer {
7171 );
7272
7373 @ Override
74- public ImageData rasterizeSVG (InputStream inputStream , int zoom ) throws IOException {
75- SVGDocument svgDocument = loadSVG (inputStream );
76- if (svgDocument == null ) {
77- SWT .error (SWT .ERROR_INVALID_IMAGE );
78- }
74+ public ImageData rasterizeSVG (InputStream inputStream , int zoom ){
75+ SVGDocument svgDocument = loadAndValidateSVG (inputStream );
7976 BufferedImage rasterizedImage = renderSVG (svgDocument , zoom );
8077 return convertToSWTImageData (rasterizedImage );
8178 }
82-
83- private SVGDocument loadSVG (InputStream inputStream ) {
84- return SVG_LOADER .load (inputStream , null , LoaderContext .createDefault ());
79+
80+ @ Override
81+ public ImageData rasterizeSVG (InputStream inputStream , int width , int height ){
82+ SVGDocument svgDocument = loadAndValidateSVG (inputStream );
83+ BufferedImage rasterizedImage = renderSVG (svgDocument , width , height );
84+ return convertToSWTImageData (rasterizedImage );
85+ }
86+
87+ private SVGDocument loadAndValidateSVG (InputStream inputStream ) {
88+ SVGDocument svgDocument = SVG_LOADER .load (inputStream , null , LoaderContext .createDefault ());
89+ if (svgDocument == null ) {
90+ SWT .error (SWT .ERROR_INVALID_IMAGE );
91+ }
92+ return svgDocument ;
8593 }
8694
8795 private BufferedImage renderSVG (SVGDocument svgDocument , int zoom ) {
96+ FloatSize sourceImageSize = svgDocument .size ();
8897 float scalingFactor = zoom / 100.0f ;
89- BufferedImage image = createImageBase (svgDocument , scalingFactor );
90- Graphics2D g = configureRenderingOptions (scalingFactor , image );
98+ int targetImageWidth = calculateTargetWidth (scalingFactor , sourceImageSize );
99+ int targetImageHeight = calculateTargetHeight (scalingFactor , sourceImageSize );
100+ return renderSVG (svgDocument , targetImageWidth , targetImageHeight );
101+ }
102+
103+ private BufferedImage renderSVG (SVGDocument svgDocument , int width , int height ) {
104+ if (width <= 0 || height <= 0 ) {
105+ SWT .error (SWT .ERROR_INVALID_ARGUMENT );
106+ }
107+ BufferedImage image = new BufferedImage (width , height , BufferedImage .TYPE_INT_ARGB );
108+ float widthScalingFactor = width / svgDocument .size ().width ;
109+ float heightScalingFactor = height / svgDocument .size ().height ;
110+ Graphics2D g = configureRenderingOptions (widthScalingFactor , heightScalingFactor , image );
91111 svgDocument .render (null , g );
92112 g .dispose ();
93113 return image ;
94114 }
95115
96- private BufferedImage createImageBase (SVGDocument svgDocument , float scalingFactor ) {
97- FloatSize sourceImageSize = svgDocument .size ();
98- int targetImageWidth = calculateTargetWidth (scalingFactor , sourceImageSize );
99- int targetImageHeight = calculateTargetHeight (scalingFactor , sourceImageSize );
100- return new BufferedImage (targetImageWidth , targetImageHeight , BufferedImage .TYPE_INT_ARGB );
101- }
102-
103116 private int calculateTargetWidth (float scalingFactor , FloatSize sourceImageSize ) {
104117 double sourceImageWidth = sourceImageSize .getWidth ();
105118 return (int ) Math .round (sourceImageWidth * scalingFactor );
@@ -110,10 +123,10 @@ private int calculateTargetHeight(float scalingFactor, FloatSize sourceImageSize
110123 return (int ) Math .round (sourceImageHeight * scalingFactor );
111124 }
112125
113- private Graphics2D configureRenderingOptions (float scalingFactor , BufferedImage image ) {
126+ private Graphics2D configureRenderingOptions (float widthScalingFactor , float heightScalingFactor , BufferedImage image ) {
114127 Graphics2D g = image .createGraphics ();
115128 g .setRenderingHints (RENDERING_HINTS );
116- g .scale (scalingFactor , scalingFactor );
129+ g .scale (widthScalingFactor , heightScalingFactor );
117130 return g ;
118131 }
119132
0 commit comments