[
https://issues.apache.org/jira/browse/BATIK-1269?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Simon Steiner updated BATIK-1269:
---------------------------------
Summary: [PATCH] AbstractGraphics2D drawImage(img, dx1,dy1,dx2,dy2,
sx1,sy1,sx2, sy2, obs) causes RasterFormatException when flipping source
coordinates updside down (was: AbstractGraphics2D drawImage(img,
dx1,dy1,dx2,dy2, sx1,sy1,sx2, sy2, obs) causes RasterFormatException when
flipping source coordinates updside down)
> [PATCH] AbstractGraphics2D drawImage(img, dx1,dy1,dx2,dy2, sx1,sy1,sx2, sy2,
> obs) causes RasterFormatException when flipping source coordinates updside
> down
> ------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: BATIK-1269
> URL: https://issues.apache.org/jira/browse/BATIK-1269
> Project: Batik
> Issue Type: Bug
> Components: SVGGraphics2D
> Affects Versions: 1.7, 1.8, 1.9, 1.10, 1.11
> Reporter: David Hägele
> Priority: Major
> Attachments: AbstractGraphics2D.diff, AbstractGraphics2D.diff
>
> Original Estimate: 0.5h
> Remaining Estimate: 0.5h
>
> The AbstractGraphics2D class
> (org.apache.batik.ext.awt.g2d.AbstractGraphics2D) is extended by
> SVGGraphics2D and implements the following {{drawImage}} method which allows
> to specify start and end corners of a rectangle in the destination space as
> well as within the image source:
> {{public boolean drawImage(}}{{Image img,}}
> {{ int dx1, int dy1, int dx2, int dy2,}}
> {{ int sx1, int sy1, int sx2, int sy2,}}
> {{ ImageObserver observer)}}
> The implementation uses the BufferedImage.getSubimage() method to extract the
> specified source pixels, See here: [github
> src|https://github.com/apache/xmlgraphics-batik/blob/9de3c8ea26ad7b91fec1ea00eac39236e000cfdb/batik-awt-util/src/main/java/org/apache/batik/ext/awt/g2d/AbstractGraphics2D.java#L774].
> This causes a RasterFormatException in case the specified source rectangle
> is not from upper left corner to lower right corner but for example upside
> down (e.g. in order to flip the image).
>
> Also the implementation assumes that the destination coordinates are from top
> left to bottom right as well, which may not be the case and results in the
> image not appearing in the dom.
>
> Here is a proposal for a fix:
>
> {{public boolean drawImage(Image img,}}
> {{ int dx1, int dy1, int dx2, int dy2,}}
> {{ int sx1, int sy1, int sx2, int sy2,}}
> {{ ImageObserver observer)}}
> {{ {}}
> {{ if(dx2 < dx1){}}
> {{ return drawImage(img, }}
> {{ dx2, dy1, dx1, dy2,}}
> {{ sx2, sy1, sx1, sy2,}}
> {{ observer);}}
> {{ }}}
> {{ if(dy2 < dy1){}}
> {{ return drawImage(img, }}
> {{ dx1, dy2, dx2, dy1,}}
> {{ sx1, sy2, sx2, sy1,}}
> {{ observer);}}
> {{ }}}
> {{ int srcW = Math.abs(sx2-sx1);}}
> {{ int srcH = Math.abs(sy2-sy1);}}
> {{ BufferedImage src = new BufferedImage(srcW, srcH,
> BufferedImage.TYPE_INT_ARGB);}}
> {{ Graphics2D g = src.createGraphics();}}
> {{ g.drawImage(img, 0,0, srcW,srcH, sx1,sy1, sx2,sy2, null);}}
> {{ g.dispose();}}
> {{ return drawImage(src, dx1, dy1, dx2-dx1, dy2-dy1, observer);}}
> {{ }}}
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]