-
Bug
-
Resolution: Fixed
-
P3
-
1.1.2, 5.0, 6
-
mustang
-
x86
-
windows_2000, windows_xp
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2120449 | 5.0u2 | Jim Graham | P3 | Resolved | Fixed | b02 |
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)
======================================================================
- backported by
-
JDK-2120449 Major buffered image render speed regression
- Resolved
- duplicates
-
JDK-5107713 REGRESSION: Bug 5073407 also applies to grayscale images
- Closed
-
JDK-6296671 Slow drawing of JAI_CODEC RenderedImages in JDK 1.5.0
- Closed
- relates to
-
JDK-6236802 Scaling special Jpeg image tops CPU to 100%
- Open