public void initImage(int w, int h, int offset) {
      int i, j;
      PixelFormat pf = im.getPF();
      int[] stride = new int[]{w};
      Object data_ = im.getRawPixelsRW(stride);

      if (pf.is888() && data_ instanceof int[]) {
        int[] data = (int[])data_;
        for (j = 0; j < h; j++) {
          for (i = 0; i < w; i++) {
            data[j * stride[0] + i] = ((i + offset) % 256) << pf.redShift;
            data[j * stride[0] + i] |= ((j + offset) % 256) << pf.greenShift;
            data[j * stride[0] + i] |= ((i + j + offset) % 256) << pf.blueShift;
          }
        }
      } else {
        if (rgbBuf == null)
          rgbBuf = new byte[w * h * 3];
        for (j = 0; j < h; j++) {
          for (i = 0; i < w; i++) {
            rgbBuf[(j * w + i) * 3] = (byte)((i + offset) % 256);
            rgbBuf[(j * w + i) * 3 + 1] = (byte)((j + offset) % 256);
            rgbBuf[(j * w + i) * 3 + 2] = (byte)((i + j + offset) % 256);
          }
        }
        pf.bufferFromRGB(data_, 0, 0, stride[0], rgbBuf, w, h);
      }
    }