When you set the animated attribute to true on a MIS it will never be
"complete" so drawImage will never return true.

The return value of drawImage should probably be ignored for 99.999999%
of code - it doesn't tell you anything that you really need to know.
All it is telling you is if all of the image data has been completely
loaded from the source, but your ImageObserver will be notified when new
data is available so there isn't much you need to do with the return
value other than its informative (novelty?) value.  In particular, if
you immediately reissue the drawImage call it will paint exactly the
same thing it painted the previous time until new data arrives (which
isn't likely to happen if you are wasting all of the CPU time repainting
something that hasn't changed yet).

With respect to the change in behavior in 1.4 vs. 1.5, I'm not sure what
might be causing that without a standalone test case.  The only odd
thing I see is that you are double buffering things - dumping pixels
into canvasImage with newPixels and then immediately transferring them
to buffer with drawImage and later the pixels get dumped from buffer to
the screen with the drawImage in the paint method - why not just use the
drawImage to the screen directly?

                       ...jim

Ken Warner wrote:
I'm haveing a strange problem -- I've used MemoryImageSource before with
great success.  But now, doing the same thing I've done before in Java 1.4
I'm getting flickering on newPixels() in Java 1.5...

That is, when I send new pixels to my MemoryImageSource mis and
repaint() the image flickers badly.  Didn't do this in 1.4.

The odd thing is that --

while((status = bg.drawImage(canvasImage,0,0,thisW, thisH,this)) == false);

never breaks because bg.drawImage never returns true.  Do I have to use
a MediaTracker
or something???

Here's what I'm doing -- I've tried it using BufferStrategy and get the
same flicker

  //this is an AWT Canvas
  private Image canvasImage = null;
  private Image buffer = null;
  private Graphics2D bg = null;
  private MemoryImageSource mis = null;
  private ColorModel cm = null;
  init()
  {
      thisW = this.getWidth();
      thisH = this.getHeight();
      mis = new MemoryImageSource(thisW,thisH,pixels,0,thisW);
      mis.setAnimated(true);
      mis.setFullBufferUpdates(true);
      canvasImage = this.createImage(mis);
      buffer = this.createImage(thisW, thisH);
      bg = (Graphics2D)buffer.getGraphics();
   }

  public void paint(Graphics g)
  {
      g.drawImage(buffer,0,0,thisW, thisH,this);
  }
     public void newPixels(int [] newPixels)
  {
      mis.newPixels(newPixels, ColorModel.getRGBdefault(),0, thisW);
      boolean status = false;
      //while((status = bg.drawImage(canvasImage,0,0,thisW, thisH,this))
== false);
      bg.drawImage(canvasImage,0,0,thisW, thisH,this);
      this.repaint();
  }

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to