package org.eclipse.swt.internal.image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; /** * Abstract factory class for loading/unloading images from files or streams in * various image file formats. * */ public abstract class FileFormat { static final String FORMAT_PACKAGE = "org.eclipse.swt.internal.image"; //$NON-NLS-1$ static final String FORMAT_SUFFIX = "FileFormat"; //$NON-NLS-1$ static final String[] FORMATS = { "WinBMP", "WinBMP", "GIF", "WinICO", "JPEG", "PNG", "TIFF", "OS2BMP" }; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$//$NON-NLS-5$ //$NON-NLS-6$//$NON-NLS-7$//$NON-NLS-8$ // LEDataOutputStream outputStream; ImageLoader loader; int compression; /** * Return whether or not the specified input stream represents a supported * file format. */ // abstract boolean isFileFormat(LEDataInputStream stream); abstract ImageData[] loadFromByteStream(); /** * Read the specified input stream, and return the device independent image * array represented by the stream. */ // public ImageData[] loadFromStream(LEDataInputStream stream) { // try { // inputStream = stream; // return loadFromByteStream(); // } catch (Exception e) { // if (e instanceof IOException) { // SWT.error(SWT.ERROR_IO, e); // } else { // SWT.error(SWT.ERROR_INVALID_IMAGE, e); // } // return null; // } // } /** * Read the specified input stream using the specified loader, and return * the device independent image array represented by the stream. */ // public static ImageData[] load(InputStream is, ImageLoader loader) { // FileFormat fileFormat = null; // LEDataInputStream stream = new LEDataInputStream(is); // boolean isSupported = false; // for (int i = 1; i < FORMATS.length; i++) { // if (FORMATS[i] != null) { // try { // Class clazz = Class.forName(FORMAT_PACKAGE + '.' // + FORMATS[i] + FORMAT_SUFFIX); // fileFormat = (FileFormat) clazz.newInstance(); // if (fileFormat.isFileFormat(stream)) { // isSupported = true; // break; // } // } catch (ClassNotFoundException e) { // FORMATS[i] = null; // } catch (Exception e) { // } // } // } // if (!isSupported) // SWT.error(SWT.ERROR_UNSUPPORTED_FORMAT); // fileFormat.loader = loader; // return fileFormat.loadFromStream(stream); // return null; // } /** * Write the device independent image array stored in the specified loader * to the specified output stream using the specified file format. */ // public static void save(OutputStream os, int format, ImageLoader loader) { // if (format < 0 || format >= FORMATS.length) // SWT.error(SWT.ERROR_UNSUPPORTED_FORMAT); // if (FORMATS[format] == null) // SWT.error(SWT.ERROR_UNSUPPORTED_FORMAT); // if (loader.data == null || loader.data.length < 1) // SWT.error(SWT.ERROR_INVALID_ARGUMENT); // // LEDataOutputStream stream = new LEDataOutputStream(os); // FileFormat fileFormat = null; // try { // // Class clazz = Class.forName(FORMAT_PACKAGE + '.' + // // FORMATS[format] // // + FORMAT_SUFFIX); // // fileFormat = (FileFormat) clazz.newInstance(); // } catch (Exception e) { // SWT.error(SWT.ERROR_UNSUPPORTED_FORMAT); // } // if (format == SWT.IMAGE_BMP_RLE) { // switch (loader.data[0].depth) { // case 8: // fileFormat.compression = 1; // break; // case 4: // fileFormat.compression = 2; // break; // } // } // fileFormat.unloadIntoStream(loader, stream); // } abstract void unloadIntoByteStream(ImageLoader loader); // /** // * Write the device independent image array stored in the specified loader // * to the specified output stream. // */ // public void unloadIntoStream(ImageLoader loader, LEDataOutputStream stream) { // try { // outputStream = stream; // unloadIntoByteStream(loader); // // outputStream.flush(); // } catch (Exception e) { // try { // // outputStream.flush(); // } catch (Exception f) { // } // SWT.error(SWT.ERROR_IO, e); // } // } }