Duplicate :
|
|
Duplicate :
|
|
Relates :
|
Name: rmT116609 Date: 07/13/2004 FULL PRODUCT VERSION : java version "1.5.0-beta3" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-beta3-b57) Java HotSpot(TM) Client VM (build 1.5.0-beta3-b57, mixed mode, sharing) ADDITIONAL OS VERSION INFORMATION : Microsoft Windows XP [Version 5.1.2600] EXTRA RELEVANT SYSTEM CONFIGURATION : Nvidia Geforce 2 GTS A DESCRIPTION OF THE PROBLEM : painting TYPE_3BYTE_BGR bufferedImages onto a JPanel extremely slow. Painfully slow compared with 1.4.2. and even 1.5 beta 1 STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Simply paint any TYPE_3BYTE_BGR BufferedImage onto a JPanel adding a scale affine to the graphics in paintComponent. Attach a JSlider to the scale value in the affine. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - Sliding the JSlider causes the image zoom in and out on the panel. Using 1.4.2 this is silky smooth. ACTUAL - The zoom change is extremely jerky and slow on 1.5 beta 3 REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- public class ImageTest extends JFrame { AffineTransform Trns; BufferedImage Img; JSlider VwZmSlider; JPanel PaintPanel; protected void setZoom(double newZoom) { Trns.setToScale(newZoom, newZoom); } public ImageTest() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Trns = new AffineTransform(); Img = new BufferedImage(500, 500, BufferedImage.TYPE_3BYTE_BGR); PaintPanel = new JPanel() { protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; g2d.transform(Trns); g2d.drawImage(Img, 0, 0, this); } }; Dimension Size = new Dimension(500, 500); PaintPanel.setPreferredSize(Size); PaintPanel.setMinimumSize(Size); PaintPanel.setMaximumSize(Size); VwZmSlider = new JSlider(0, 100, 50); VwZmSlider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent changeEvent) { int val = VwZmSlider.getValue(); switch (val) { case 0: setZoom(0.1); break; case 15: setZoom(0.5); break; case 30: setZoom(0.75); break; case 50: setZoom(1.0); break; case 70: setZoom(1.5); break; case 85: setZoom(2.0); break; case 100: setZoom(3.0); break; default: if (val > 0 && val < 15) { setZoom(((0.39 / 14.0) * (val - 1)) + 0.1); } else if (val > 15 && val < 30) { setZoom(((0.24 / 14.0) * (val - 15)) + 0.5); } else if (val > 30 && val < 50) { setZoom(((0.24 / 19.0) * (val - 30)) + 0.75); } else if (val > 50 && val < 70) { setZoom(((0.49 / 19.0) * (val - 50)) + 1.0); } else if (val > 70 && val < 85) { setZoom(((0.49 / 14.0) * (val - 70)) + 1.5); } else { setZoom(((0.99 / 14.0) * (val - 85)) + 2.0); } break; } PaintPanel.repaint(); } }); JPanel FillPanel = new JPanel(); FillPanel.setLayout(new BorderLayout()); FillPanel.add(PaintPanel, BorderLayout.CENTER); FillPanel.add(VwZmSlider, BorderLayout.SOUTH); getContentPane().add(FillPanel); pack(); show(); } public static void main(String[] args) { new ImageTest(); } } ---------- END SOURCE ---------- (Incident Review ID: 285594) ======================================================================
|