private void convertToRGB() {
    int w = bimage.getWidth();
    int h = bimage.getHeight();
    int size = w * h;

    DataBufferInt dbi = new DataBufferInt(size);
    // Note that stealData() requires a markDirty() afterwards
    // since we modify the data in it.
    int newpixels[] = SunWritableRaster.stealData(dbi, 0);
    if (cmodel instanceof IndexColorModel
        && biRaster instanceof ByteComponentRaster
        && biRaster.getNumDataElements() == 1) {
      ByteComponentRaster bct = (ByteComponentRaster) biRaster;
      byte[] data = bct.getDataStorage();
      int coff = bct.getDataOffset(0);
      for (int i = 0; i < size; i++) {
        newpixels[i] = srcLUT[data[coff + i] & 0xff];
      }
    } else {
      Object srcpixels = null;
      int off = 0;
      for (int y = 0; y < h; y++) {
        for (int x = 0; x < w; x++) {
          srcpixels = biRaster.getDataElements(x, y, srcpixels);
          newpixels[off++] = cmodel.getRGB(srcpixels);
        }
      }
    }
    // We modified the data array directly above so mark it as dirty now...
    SunWritableRaster.markDirty(dbi);

    isSameCM = false;
    cmodel = ColorModel.getRGBdefault();

    int bandMasks[] = {0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000};

    biRaster = Raster.createPackedRaster(dbi, w, h, w, bandMasks, null);

    bimage = createImage(cmodel, biRaster, cmodel.isAlphaPremultiplied(), null);
    srcLUT = null;
    isDefaultBI = true;
  }