Re: creating buffered image
In article
<fb21d6ac-7293-4625-8ad0-2b8cdd1ef372@z20g2000pra.googlegroups.com>,
mark jason <markjason72@gmail.com> wrote:
I am working on an image processing application and thought of
creating a class called FaceImage to represent a n image of a human
face. I created the class like this:
Please format code so that it remains readable, as suggested in the
article here: <http://sscce.org/>
I also wanted to implement a saveImage() method so that I can save
the FaceImage object as an image file of given format. However when I
tried MemoryImageSource constructor I found that it needs an int[]
not double[].
WritableRaster has accessors for int, float and double.
Is there some way I can use the double[] containing pixel to save a
new image? Do I need to convert the double[] to int[] as needed by
MemoryImageSource? I guess a for loop would be very inefficient.
I'd probably just use a BufferedImage; that way I can use ImageIO, as
suggested in the tutorial:
<http://download.oracle.com/javase/tutorial/2d/images/index.html>
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class FaceImage {
private String fileName;
private BufferedImage bi;
private int w;
private int h;
double[] dData;
int[] iData;
public FaceImage(File imageFile) throws IOException {
bi = ImageIO.read(imageFile);
this.fileName = imageFile.getName();
this.w = bi.getWidth();
this.h = bi.getHeight();
this.dData = bi.getData().getPixels(0, 0, w, h, dData);
this.iData = bi.getData().getPixels(0, 0, w, h, iData);
}
public FaceImage(String fileName, int w, int h, double[] data) {
if (data.length != 3 * w * h) {
throw new IllegalArgumentException(
"data size must be equal to " + w * h);
}
this.fileName = fileName;
this.w = w;
this.h = h;
this.dData = data;
this.bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
bi.getRaster().setPixels(0, 0, w, h, data);
this.iData = bi.getData().getPixels(0, 0, w, h, iData);
}
public void save() throws IOException {
ImageIO.write(bi, "JPEG", new File(fileName));
}
public static void main(String[] args) throws IOException {
new FaceImage(new File("image.jpg"));
new FaceImage("one.jpg", 1, 1, new double[]{0, 0, 0});
}
}
Any help or advice would be nice.
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>