[ 
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]

Reply via email to