@@ -72,34 +72,44 @@ public class JSVGRasterizer implements SVGRasterizer {
7272
7373 @ Override
7474 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- }
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 ) throws IOException {
82+ SVGDocument svgDocument = loadAndValidateSVG (inputStream );
83+ BufferedImage rasterizedImage = renderSVG (svgDocument , width , height );
84+ return convertToSWTImageData (rasterizedImage );
85+ }
86+
87+ private SVGDocument loadAndValidateSVG (InputStream inputStream ) throws IOException {
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+ BufferedImage image = new BufferedImage (width , height , BufferedImage .TYPE_INT_ARGB );
105+ float widthScalingFactor = width / svgDocument .size ().width ;
106+ float heightScalingFactor = height / svgDocument .size ().height ;
107+ Graphics2D g = configureRenderingOptions (widthScalingFactor , heightScalingFactor , image );
91108 svgDocument .render (null , g );
92109 g .dispose ();
93110 return image ;
94111 }
95112
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-
103113 private int calculateTargetWidth (float scalingFactor , FloatSize sourceImageSize ) {
104114 double sourceImageWidth = sourceImageSize .getWidth ();
105115 return (int ) Math .round (sourceImageWidth * scalingFactor );
@@ -110,10 +120,10 @@ private int calculateTargetHeight(float scalingFactor, FloatSize sourceImageSize
110120 return (int ) Math .round (sourceImageHeight * scalingFactor );
111121 }
112122
113- private Graphics2D configureRenderingOptions (float scalingFactor , BufferedImage image ) {
123+ private Graphics2D configureRenderingOptions (float widthScalingFactor , float heightScalingFactor , BufferedImage image ) {
114124 Graphics2D g = image .createGraphics ();
115125 g .setRenderingHints (RENDERING_HINTS );
116- g .scale (scalingFactor , scalingFactor );
126+ g .scale (widthScalingFactor , heightScalingFactor );
117127 return g ;
118128 }
119129
0 commit comments