/* * NewWaves.java * * Copyright(c) 2001, Particle Corporation * All Rights Reserved */ import java.awt.*; import java.applet.*; import java.awt.image.*; /** * NewWaves applet * * @author Alex S. * @version 1.1.0 */ public class NewWaves extends Applet implements Runnable, ImageProducer { // a running thread for this applet private Thread m_thread; // track loading of images private MediaTracker tracker; // image object. this is the one we load from server private Image image_object; // this is a corresponding data buffer for image_object private int[] image_buffer; // double image is the viewing area represented as an image private Image double_image; // this is the viewing area represented as a data buffer. it is blited onto double_image private int[] double_buffer; // dimensions of the viewing area (not loaded image) private int m_width,m_height; // color model for our image producer private ColorModel color_model; // image producer has to have an image consumer private ImageConsumer consumer = null; // transforms for our wave private int[] sin_x_table = null; private int[] sin_y_table = null; int xcounter = 0; int ycounter = 0; /** * constructor to init some basic things */ public NewWaves(){ m_thread = null; image_object = null; image_buffer = null; double_buffer = null; tracker = null; } /** * init method, called by applet container to init applet */ public void init(){ // initialize media tracker to this component tracker = new MediaTracker(this); // get image String param; param = getParameter("img"); image_object = getImage(getDocumentBase(),param); // track image tracker.addImage(image_object,0); // get dimensions m_width = size().width; m_height = size().height; // setup image producer attributes & double buffer color_model = new DirectColorModel(32,0xFF0000,0x00FF00,0x0000FF); double_buffer = new int[m_width*m_height]; double_image = createImage(this); // init the wave transforms int i; sin_x_table = new int[m_width*2]; sin_y_table = new int[m_height*2]; for (i=0;i m_width) w = m_width; if (h > m_height) h = m_height; // get image pixels and store them in the image buffer PixelGrabber pg = new PixelGrabber(image_object,0,0,w,h,image_buffer,0,m_width); try { pg.grabPixels(); } catch (InterruptedException e) { return; } } else { // using the wave transforms, copy the image buffer to the // display buffer. The result will look like a waved version // of the image buffer. int x,y,tx,ty; xcounter = xcounter > (m_width-10) ? 0:xcounter+9; ycounter = ycounter > (m_height-6) ? 0:ycounter+5; for (y=0;y