topical media & game development

talk show tell print

graphic-processing-site-examples-Basics-Image-RequestImage-RequestImage.pde / pde



  
Request Image by Ira Greenberg. From Processing for Flash Developers, Friends of ED, 2009. Shows how to use the requestImage() function with preloader animation. The requestImage() function loads images on a separate thread so that the sketch does not freeze while they load. It's very useful when you are loading large images, as this example demonstrates. To work, this example requires 10 images named dublin0.jpg ... dublin9.jpg in the sketch data directory. To save space, these images are not included with the example.

  
  
  int imgCount = 10;
  PImage[] imgs = new PImage[imgCount];
  float imgW;
  
  // Keeps track of loaded images (true or false)
  boolean[] loadStates = new boolean[imgCount];
  
  // For loading animation
  float loaderX, loaderY, theta;
  
  void setup() {
    size(800, 60);
    smooth();
    imgW = width/imgCount;
  
    // Load images asynchronously
    for (int i = 0; i < imgCount; i++){
      imgs[i] = requestImage("dublin"+i+".jpg");
    }
  }
  
  void draw(){
    background(0);
    
    // Start loading animation
    runLoaderAni();
    
    for (int i = 0; i < imgs.length; i++){
      // Check if individual images are fully loaded
      if ((imgs[i].width != 0) && (imgs[i].width != -1)){
        // As images are loaded set true in boolean array
        loadStates[i] = true;
      }
    }
    // When all images are loaded draw them to the screen
    if (checkLoadStates()){
      drawImages();
    }
  }
  
  void drawImages(){
    for (int i = 0; i < imgs.length; i++){
      image(imgs[i], width/10*i, 0, imgW, height);
    }
  }
  
  // Loading animation
  void runLoaderAni(){
    // Only run when images are loading
    if (!checkLoadStates()){
      ellipse(loaderX, loaderY, 10, 10);
      loaderX += 2;
      loaderY = height/2 + sin(theta) * (height/2.5);
      theta += PI/22;
      // Reposition ellipse if it goes off the screen
      if (loaderX > width + 5){
        loaderX = -5;
      }
    }
  }
  
  // Return true when all images are loaded - no false values left in array 
  boolean checkLoadStates(){
    for (int i = 0; i < imgs.length; i++){
      if (loadStates[i] == false){
        return false;
      } 
    }
    return true;
  }
  
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.