Hello,
I have a problem when using copyArea to scroll an image with a negative dx value (that is, scroll an image to the left) with an opaque picture format.
Here is a simple test I performed in a JFrame:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class TestFrame extends javax.swing.JFrame {
private BufferedImage buffer = null; public TestFrame() { try { BufferedImage img = ImageIO.read(new File("/home/lauwenmark/tmp/test.jpg")); this.buffer = new BufferedImage(1600, 1200, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = this.buffer.createGraphics(); g2d.drawImage(img, 0, 0, this); g2d.dispose(); } catch (IOException ex) { ex.printStackTrace(); this.buffer = new BufferedImage(1600, 1200, BufferedImage.TYPE_INT_RGB); } }
@Override public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; super.paint(g); g2d.drawImage(this.buffer, 0, 0, this); } |
And I scroll using this:
1 2 3 4
| Graphics2D g2d = buffer.createGraphics(); g2d.copyArea(64, 0, this.buffer.getWidth()-64, this.buffer.getHeight(), -64, 0); g2d.dispose(); this.repaint(); |
When this.buffer is of TYPE_INT_ARGB, it works as expected. However, when using TYPE_INT_RGB, it doesn't and ends up corrupting the display like this:

Uploaded with
ImageShack.usWhere am I doing it wrong? Or is it a bug in copyArea?