atti75
asked on
Displaying images from a buffer
Hi!
I have an Oracle db with images. I read an image from this db with an applet. I have the image in a buffer. How can I display this image in that applet?
Thanks!
I have an Oracle db with images. I read an image from this db with an applet. I have the image in a buffer. How can I display this image in that applet?
Thanks!
ASKER
I can read the image with a stream...but i have jpg and gif images..
how can I dispay these? I have a buffer with the image file...
how can I dispay these? I have a buffer with the image file...
What do you mean a buffer? A 2 dimensional array of colors?
ASKER
Adjusted points from 50 to 100
ASKER
:) I have the image in a byte array for exemple...with other words I've got the file in memory not in another storage media(HD)
You need to use the MemoryImageSource class to create an image and then you can do with the Image whatever is possible in Java.
This is achieved like this:
import java.awt.image.*;
import java.awt.*;
import java.applet.*;
public class MyApplet extends Applet{
public Image createImage(int [] pixels,int width, int height){
return this.createImage(new MemoryImageSource(width,he ight,pixel s,0,width) )
}
}
This is achieved like this:
import java.awt.image.*;
import java.awt.*;
import java.applet.*;
public class MyApplet extends Applet{
public Image createImage(int [] pixels,int width, int height){
return this.createImage(new MemoryImageSource(width,he
}
}
You can then display it in the usual manner with:
public void paint(Graphics g){
MyImage image = createImage(myBufferImage, width,heig ht);
g.drawImage(image,0,0,this );
}
public void paint(Graphics g){
MyImage image = createImage(myBufferImage,
g.drawImage(image,0,0,this
}
Doesn't that answer your question?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
public class BMPReader extends Object
{
// Constants indicating how the data is stored
public static final int BI_RGB = 0;
public static final int BI_RLE8 = 1;
public static final int BI_RLE4 = 2;
public static ImageProducer getBMPImage(InputStream stream)
throws IOException
{
// The DataInputStream allows you to read in 16 and 32 bit numbers
DataInputStream in = new DataInputStream(stream);
// Verify that the header starts with 'BM'
if (in.read() != 'B') {
throw new IOException("Not a .BMP file");
}
if (in.read() != 'M') {
throw new IOException("Not a .BMP file");
}
// Get the total file size
int fileSize = intelInt(in.readInt());
// Skip the 2 16-bit reserved words
in.readUnsignedShort();
in.readUnsignedShort();
int bitmapOffset = intelInt(in.readInt());
int bitmapInfoSize = intelInt(in.readInt());
int width = intelInt(in.readInt());
int height = intelInt(in.readInt());
// Skip the 16-bit bitplane size
in.readUnsignedShort();
int bitCount = intelShort(in.readUnsigned
int compressionType = intelInt(in.readInt());
int imageSize = intelInt(in.readInt());
// Skip pixels per meter
in.readInt();
in.readInt();
int colorsUsed = intelInt(in.readInt());
int colorsImportant = intelInt(in.readInt());
if (colorsUsed == 0) colorsUsed = 1 << bitCount;
int colorTable[] = new int[colorsUsed];
// Read the bitmap's color table
for (int i=0; i < colorsUsed; i++) {
colorTable[i] = (intelInt(in.readInt()) & 0xffffff) + 0xff000000;
}
// Create space for the pixels
int pixels[] = new int[width * height];
// Read the pixels from the stream based on the compression type
if (compressionType == BI_RGB) {
if (bitCount == 24) {
readRGB24(width, height, pixels, in);
} else {
readRGB(width, height, colorTable, bitCount,
pixels, in);
}
} else if (compressionType == BI_RLE8) {
readRLE(width, height, colorTable, bitCount,
pixels, in, imageSize, 8);
} else if (compressionType == BI_RLE4) {
readRLE(width, height, colorTable, bitCount,
pixels, in, imageSize, 4);
}
// Create a memory image source from the pixels
return new MemoryImageSource(width, height, pixels, 0,
width);
}
// Reads in pixels in 24-bit format. There is no color table, and the
// pixels are stored in 3-byte pairs. Oddly, all windows bitmaps are
// stored upside-down - the bottom line is stored first.
protected static void readRGB24(int width, int height, int pixels[],
DataInputStream in)
throws IOException
{
// Start storing at the bottom of the array
for (int h = height-1; h >= 0; h--) {
int pos = h * width;
for (int w = 0; w < width; w++) {
// Read in the red, green, and blue components
int red = in.read();
int green = in.read();
int blue = in.read();
// Turn the red, green, and blue values into an RGB color with
// an alpha value of 255 (fully opaque)
pixels[pos++] = 0xff000000 + (red << 16) +
(green << 8) + blue;
}
}
}
Bye... :)
(This example was extracted from: "JAVA
Expert Solutions by Mark Wutka, et. al."