public BufferedImage readImage() {
        Logger.getLogger(ImageReader.class.getName()).entering(ImageReader.class.getName(), "readImage");
        Logger.getLogger(ImageReader.class.getName()).log(Level.FINE, "Searching imageObject type : {0}", imageObject.getClass().getName());
        if (image != null) {
            image.flush();
        }
        if (imageObject instanceof File) {
            if (((File)imageObject).getName().toLowerCase().endsWith(".jpg") || ((File)imageObject).getName().toLowerCase().endsWith(".jpeg") || ((File)imageObject).getName().toLowerCase().endsWith(".gif") || ((File)imageObject).getName().toLowerCase().endsWith(".png")) {
                readWithFileToolkit();
            } else {
                readWithFileImageIO();
            }
            Logger.getLogger(ImageReader.class.getName()).exiting(ImageReader.class.getName(), "readImage", image);
            return image;
        }
        if (imageObject instanceof java.util.zip.InflaterInputStream || imageObject.getClass().getName().equals("java.util.zip.ZipFile$ZipFileInputStream")) {
            readWithInputStreamImageIO();
            Logger.getLogger(ImageReader.class.getName()).exiting(ImageReader.class.getName(), "readImage", image);
            return image;
        }
        if (imageObject instanceof java.io.PipedInputStream) {
            readWithInputStreamImageIO();
            Logger.getLogger(ImageReader.class.getName()).exiting(ImageReader.class.getName(), "readImage", image);
            return image;
        }
        Logger.getLogger(ImageReader.class.getName()).exiting(ImageReader.class.getName(), "readImage", null);
        return null;
    }