[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 224
  • Last Modified:

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!
0
atti75
Asked:
atti75
  • 5
  • 3
1 Solution
 
dmaguilloCommented:
Hi atti75. I don´t know how u have stored image date, but here u have an example to display an image stored like InputStream:

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.readUnsignedShort());

        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."
0
 
atti75Author Commented:
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...
0
 
Sasha_MapaCommented:
What do you mean a buffer? A 2 dimensional array of colors?
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
atti75Author Commented:
Adjusted points from 50 to 100
0
 
atti75Author Commented:
:) 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)



0
 
Sasha_MapaCommented:
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,height,pixels,0,width))
}


}
0
 
Sasha_MapaCommented:
You can then display it in the usual manner with:


public void paint(Graphics g){
  MyImage image = createImage(myBufferImage,width,height);
  g.drawImage(image,0,0,this);
}
0
 
Sasha_MapaCommented:
Doesn't that answer your question?
0
 
Sasha_MapaCommented:
Ok, it seems like my comment answers this question. If anyone disagrees or thinks his response was better, please post a comment and I'll withdraw the answer.

Answer:

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,height,pixels,0,width))
  }


}

You can then display it in the usual manner with:

public void paint(Graphics g){
    Image image = createImage(myBufferImage,width,height);
    g.drawImage(image,0,0,this);
}
0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now