Solved

Displaying images from a buffer

Posted on 2000-03-28
9
221 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

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

Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

Question has a verified solution.

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

Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …

705 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