-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
1.3.0
-
x86
-
windows_nt
Name: rlT66838 Date: 03/30/2000
java version "1.3.0rc1-T"
When operating on source and destination BufferedImages of type
TYPE_USHORT_GRAY, AffineTransformOp.filter produces a completely incorrect
output, with severely distorted image data.
The problem is reproduced every time this operation is invoked.
The problem is generic for the Windows NT platform, and seems independent of
hardware and graphics mode.
I have not tested this on other platforms.
No error message, or trace info.
Source code:
Example.java: reproduces a simple example of the bug.
import java.awt.image.*;
import java.awt.geom.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Example extends JPanel {
private static int imageType = BufferedImage.TYPE_USHORT_GRAY;
private BufferedImage src;
private BufferedImage dst;
public static void main(String argv[]) {
JFrame f = new JFrame();
Example ex = new Example();
ex.setPreferredSize(new Dimension(450, 300));
f.getContentPane().add(ex);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.pack();
f.setVisible(true);
}
public void paintComponent(Graphics g) {
AffineTransform at = AffineTransform.getScaleInstance(2.0, 2.0);
AffineTransformOp atop =
new AffineTransformOp(at,AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
if(src == null) {
src = createSourceImage(128, 128);
dst = new BufferedImage(256, 256, imageType);
atop.filter(src, dst);
}
g.drawImage(dst, 0, 0, null);
g.drawImage(src, 300, 0, null);
}
private BufferedImage createSourceImage(int w, int h) {
BufferedImage bi = new BufferedImage(w, h, imageType);
WritableRaster wr = bi.getRaster();
short[] rampdata = new short[w];
int i;
for(i=0; i<w; i++) {
rampdata[i] = (short)(256*i);
}
for(i=0; i<h; i++) {
wr.setDataElements(0, i, w, 1, rampdata);
}
return(bi);
}
}
Example2.java: essentially the same program, but with images of
type TYPE_BYTE_GRAY. It runs CORRECTLY.
import java.awt.image.*;
import java.awt.geom.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Example2 extends JPanel {
private static int imageType = BufferedImage.TYPE_BYTE_GRAY;
private BufferedImage src;
private BufferedImage dst;
public static void main(String argv[]) {
JFrame f = new JFrame();
Example2 ex = new Example2();
ex.setPreferredSize(new Dimension(450, 300));
f.getContentPane().add(ex);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.pack();
f.setVisible(true);
}
public void paintComponent(Graphics g) {
AffineTransform at = AffineTransform.getScaleInstance(2.0, 2.0);
AffineTransformOp atop =
new AffineTransformOp(at,AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
if(src == null) {
src = createSourceImage(128, 128);
dst = new BufferedImage(256, 256, imageType);
atop.filter(src, dst);
}
g.drawImage(dst, 0, 0, null);
g.drawImage(src, 300, 0, null);
}
private BufferedImage createSourceImage(int w, int h) {
BufferedImage bi = new BufferedImage(w, h, imageType);
WritableRaster wr = bi.getRaster();
byte[] rampdata = new byte[w];
int i;
for(i=0; i<w; i++) {
rampdata[i] = (byte)i;
}
for(i=0; i<h; i++) {
wr.setDataElements(0, i, w, 1, rampdata);
}
return(bi);
}
}
(Review ID: 101415)
======================================================================
- duplicates
-
JDK-4192198 Affine Ops (Rotate and Scale) do not work on UShort Images
-
- Resolved
-