Re: using double[][] pixeldata to recreate the image
In article
<b602af0a-383d-44ce-8f3b-6486331f7460@z6g2000pre.googlegroups.com>,
harryos <oswald.harry@gmail.com> wrote:
[...]
[I] have some code that reads a greyscale image and stores the
pixeldata as a double[][].
[...]
So [I] can't figure out how to create a WritableRaster
on which [I] can set the pixels. Can someone help?
You've gotten excellent suggestions from Tom & Knute, but knowing what's
in the array is essential. If you just want to tinker, you can create a
BufferedImage from any visible Component, a JPanel in this example:
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class RasterTest extends JPanel {
private static final int WIDTH = 256;
private static final int HEIGHT = 256;
public RasterTest() {
setPreferredSize(new Dimension(WIDTH * 3, HEIGHT * 3));
}
public void paintComponent(Graphics g) {
final BufferedImage image;
int[] iArray = { 0, 0, 0, 255 };
image = (BufferedImage) createImage(WIDTH, HEIGHT);
WritableRaster raster = image.getRaster();
for (int row = 0; row < HEIGHT; row++) {
for (int col = 0 ; col < WIDTH; col++) {
int v = row * col;
iArray[0] = v << 1;
iArray[1] = v << 2;
iArray[2] = v << 3;
raster.setPixel(col, row, iArray);
}
}
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
RasterTest rt = new RasterTest();
f.add(rt, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
});
}
}
You'll have to run the code to see the nice picture. :-)
[Thanks to Knute for the concise EDT startup code. The Component's
createImage() method returns null until it is made visible.]
--
John B. Matthews
trashgod at gmail dot com
home dot woh dot rr dot com slash jbmatthews