Solved

Image .....from a gif file

Posted on 2004-10-04
15
169 Views
Last Modified: 2013-11-19
Hi Experts,
         
     How do I create an Image from a *.gif file ??? e.g.
   
       Image offscreen = new Image( ??? ("background0.gif"));

   thanks !
0
Comment
Question by:meow00
  • 7
  • 6
  • 2
15 Comments
 
LVL 92

Expert Comment

by:objects
ID: 12223741
Image i = new ImageIcon("xyz.gif").getImage();
0
 
LVL 92

Expert Comment

by:objects
ID: 12223750
but if you want to create an offscreen image then you need to create a blank one:

BufferedImage offscreen = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = offscreen.getGraphics();
0
 
LVL 1

Author Comment

by:meow00
ID: 12223897
thanks very much ....

  so for the graphics g ... is it possible to load " *.gif " to it .... or it can only use functions like :
 fillOvals .... fillRect ... drawString ..etc.  ???

  thanks a lot !!!
0
 
LVL 92

Expert Comment

by:objects
ID: 12223900
yes that is correct
0
 
LVL 1

Author Comment

by:meow00
ID: 12223908
err ..............so .... does it mean I need to paint the offscreen pixel by pixel  ....... by myself ???
0
 
LVL 92

Assisted Solution

by:objects
objects earned 200 total points
ID: 12223913
you do the same painting you are already doing, just instead of painting to the screen you paint to the offscreen image.
Then in your paint() method you just paint the offscreen image to the screen.
0
 
LVL 1

Author Comment

by:meow00
ID: 12223985
Hi,

    Thanks very much ..... so I tried the offscreen in the following code .... but I still got "flash" .... did I make any mistake in the following code ??? please help !!! many thanks !!!

//-------------------------------------------------------------------  
   .... blah blah ....

    ImageIcon headImg = new ImageIcon(getClass().getResource("head.gif"));
    ImageIcon bgImg = new ImageIcon(getClass().getResource("background0.gif"));
   
    BufferedImage offscreen = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
    Graphics offscreenG = offscreen.getGraphics();

      .... blah blah ....

  public void update(Graphics g)
    {
        paint(offscreenG);               // call the paint function with offscreen graphics
        g.drawImage(offscreen,0,0,this);    // draw image to screen
    }

   
    public void paint(Graphics offscreenG)
    {
        offscreenG.drawImage( bgImg.getImage(), 0, 0, 420, 420,  null) ;
        offscreenG.drawImage( headImg.getImage(), snake_x[0], snake_y[0], 20, 20, null) ;  
    }
   .... blah blah ......

 
0
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 
LVL 7

Expert Comment

by:tomboshell
ID: 12224165
Looking at you code I would think that the actual screen painting occurs when the update method is being executed.  This will not always occur.  I do believe objects stated >> Then in your paint() method you just paint the offscreen image to the screen.

Set the image up in your constructor or initalizer, ie before you ever want to actually display it.  That keeps a ready reference to it, then paint it out upon need.    It may also help to set the container (probably JPanel)  to double buffered since sometimes that is all you need.  
0
 
LVL 1

Author Comment

by:meow00
ID: 12224174
thanks for the info ... but how do I  "Set the image up in your constructor or initalizer" exactly ???
0
 
LVL 92

Expert Comment

by:objects
ID: 12224311
problem could be that you are painting to the frame, I generally subclass JPanel instead of JPanel and have never has any flicker problems.
0
 
LVL 7

Accepted Solution

by:
tomboshell earned 200 total points
ID: 12224342
up there where you have >>.... blah blah ....

That is what I would say, so then you would have it stored.  But see what Objects says...

The paint method will be called from outside your class also, ie when the screen (panel) is getting painted it will call your paint method also.  Then a different graphics object will be sent in (like for the screen or panel), that is where you want to draw your stored image.

Maybe the following will give you some ideas....or not

public class YourBlahClass implements ImageObserver{
// this class can now 'observe' itself
    ImageIcon headImg;
    ImageIcon bgImg;
   
    private int x=0, y=0, width = 0, height = 0; // properties of the combo-image

    BufferedImage offscreen;
    Graphics offscreenG;
    private Graphics summonerGraphics;

  public YourBlahClass(){  //constructor
        headImg  = new ImageIcon(getClass().getResource("head.gif"));
        bgImg  = new ImageIcon(getClass().getResource("background0.gif"));
        offscreen  = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
        offscreenG  = offscreen.getGraphics();

       offscreenG.drawImage( bgImg.getImage(), 0, 0, 420, 420,  null) ;
       offscreenG.drawImage( headImg.getImage(), snake_x[0], snake_y[0], 20, 20, null) ;
   }

  public boolean imageUpdate(Image img, int infoF, inx x1, int y1, int width1, int height1){
    // store the x,y, width, height for possible later adjustment
     // then call the paint method
     paint(summonerGraphics);  // set the first time this was called.  
  }

 public void paint(Graphics g){  // the graphics object will be coming from whatever wants to show the image...
    g.drawImage(offscreenG, x,y, width, height, this);
    summonerGraphics = g;
 }
}
0
 
LVL 1

Author Comment

by:meow00
ID: 12235908
Hi object, I tried JPanel ... but still got the same problem .....

Hi tomoshell, ... I tried the above method ... but still got flickers .......

still working on it ........
0
 
LVL 92

Expert Comment

by:objects
ID: 12235987
> Hi object, I tried JPanel ... but still got the same problem .....

can you post the code
0
 
LVL 1

Author Comment

by:meow00
ID: 12245664
problem solved ... thanks all !
0
 
LVL 92

Expert Comment

by:objects
ID: 12245676
(:
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

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…
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Not only does Prezi allow you to create non-linear presentations, it also makes it easy to apply transition animations between your frames. Learn how to apply a fade-in transition to select items and entire frames in this tutorial Select "Edit Path"…
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…

746 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now