Solved

Displaying images from a buffer

Posted on 2000-03-28
9
219 Views
Last Modified: 2008-02-01
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
Comment
Question by:atti75
  • 5
  • 3
9 Comments
 
LVL 1

Expert Comment

by:dmaguillo
ID: 2663348
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
 

Author Comment

by:atti75
ID: 2663444
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
 
LVL 7

Expert Comment

by:Sasha_Mapa
ID: 2664364
What do you mean a buffer? A 2 dimensional array of colors?
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:atti75
ID: 2664567
Adjusted points from 50 to 100
0
 

Author Comment

by:atti75
ID: 2664568
:) 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
 
LVL 7

Expert Comment

by:Sasha_Mapa
ID: 2664758
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
 
LVL 7

Expert Comment

by:Sasha_Mapa
ID: 2664773
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
 
LVL 7

Expert Comment

by:Sasha_Mapa
ID: 2668882
Doesn't that answer your question?
0
 
LVL 7

Accepted Solution

by:
Sasha_Mapa earned 100 total points
ID: 2696058
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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
configure dependency in POM for new database 3 33
servlet example 17 51
Convert from a json string array to a Java object 3 51
java mysql insert application 14 25
INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

790 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question