static boolean testSubImage(
      int x0,
      int y0,
      int dx,
      int dy,
      int type,
      int rBits,
      int gBits,
      int bBits,
      int cs,
      BufferedImage gldImage,
      double accuracy) {
    BufferedImage src = ImageFactory.createDCMImage(type, cs);
    BufferedImage subSrc = src.getSubimage(x0, y0, dx, dy);
    BufferedImage dst = ImageFactory.createDstImage(BufferedImage.TYPE_INT_RGB);
    BufferedImage subDst = dst.getSubimage(x0, y0, dx, dy);

    ColorConvertOp op = new ColorConvertOp(null);

    op.filter(subSrc, subDst);

    ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits, bBits);
    boolean result = cmp.compare(subDst, gldImage, x0, y0, dx, dy);
    if (!result) {
      System.err.println(cmp.getStat());
    }
    return result;
  }
  static boolean testImage(
      int dataType,
      int rBits,
      int gBits,
      int bBits,
      int cs,
      BufferedImage gldImage,
      double accuracy) {
    BufferedImage src = ImageFactory.createCCMImage(cs, dataType);
    BufferedImage dst = ImageFactory.createDstImage(BufferedImage.TYPE_INT_RGB);
    ColorConvertOp op = new ColorConvertOp(null);
    op.filter(src, dst);

    ImageComparator cmp = new ImageComparator(accuracy, rBits, gBits, bBits);
    boolean result = cmp.compare(gldImage, dst);
    if (!result) {
      System.err.println(cmp.getStat());
    }
    return result;
  }
 @Override
 public void handleMessage(Message msg) {
   super.handleMessage(msg);
   switch (msg.what) {
     case SHOW_PROGRESS:
       mPbBar.setVisibility(View.VISIBLE);
       break;
     case REMOVE_PROGRESS:
       handler.removeMessages(SHOW_PROGRESS);
       mPbBar.setVisibility(View.INVISIBLE);
       break;
   }
 }
  public void generateImage(String img, OutputStream out) throws IOException {
    // create an image to draw
    ImageFactory fact = new ImageFactory();
    Image i = null;

    if (_displayStyle.equals(STYLE_OVAL)) {
      if (_width > 0) {
        i =
            fact.createOvalButton(
                _width,
                _height,
                _font,
                _source,
                _textColor,
                _backgroundColor,
                _topLeftBorder,
                _bottomRightBorder,
                _transparentColor,
                false,
                _enabled);
      } else {
        i =
            fact.createOvalButton(
                _height,
                _font,
                _source,
                _textColor,
                _backgroundColor,
                _topLeftBorder,
                _bottomRightBorder,
                _transparentColor,
                false,
                _enabled);
      }
    } else if (_width > 0) {
      i =
          fact.createRectangleButton(
              _width,
              _height,
              _font,
              _source,
              _textColor,
              _backgroundColor,
              _topLeftBorder,
              _bottomRightBorder,
              false,
              _enabled);
    } else {
      i =
          fact.createRectangleButton(
              _height,
              _font,
              _source,
              _textColor,
              _backgroundColor,
              _topLeftBorder,
              _bottomRightBorder,
              false,
              _enabled);
    }

    GifEncoder g = new GifEncoder(i, out, true, _transparentColor);
    g.encode();
  }
 @Override
 public void start(Stage primaryStage) throws Exception {
   MainWindow mainWindow = MainWindowJavaFXFactory.newMainWindow(primaryStage);
   mainWindow.setLogo(ImageFactory.newImage("/logo.png"), Color.web("ff8888"));
   mainWindow.show();
 }