
org.eclipse.swt.graphics.ImageLoader Maven / Gradle / Ivy
The newest version!
/*******************************************************************************
* Copyright (c) 2000, 2008, 2012 IBM Corporation, Gerhardt Informatics Kft. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Gerhardt Informatics Kft. - GEFGWT port
*******************************************************************************/
package org.eclipse.swt.graphics;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.internal.Compatibility;
import org.eclipse.swt.internal.image.FileFormat;
/**
* Instances of this class are used to load images from, and save images to, a
* file or stream.
*
* Currently supported image formats are:
*
*
* - BMP (Windows or OS/2 Bitmap)
* - ICO (Windows Icon)
* - JPEG
* - GIF
* - PNG
* - TIFF
*
* ImageLoaders
can be used to:
*
* - load/save single images in all formats
* - load/save multiple images (GIF/ICO/TIFF)
* - load/save animated GIF images
* - load interlaced GIF/PNG images
* - load progressive JPEG images
*
*
* @see SWT Example:
* ImageAnalyzer
* @see Sample code and further
* information
*/
public class ImageLoader {
/**
* the array of ImageData objects in this ImageLoader. This array is read in
* when the load method is called, and it is written out when the save
* method is called
*/
public ImageData[] data;
/**
* the width of the logical screen on which the images reside, in pixels
* (this corresponds to the GIF89a Logical Screen Width value)
*/
public int logicalScreenWidth;
/**
* the height of the logical screen on which the images reside, in pixels
* (this corresponds to the GIF89a Logical Screen Height value)
*/
public int logicalScreenHeight;
/**
* the background pixel for the logical screen (this corresponds to the
* GIF89a Background Color Index value). The default is -1 which means
* 'unspecified background'
*
*/
public int backgroundPixel;
/**
* the number of times to repeat the display of a sequence of animated
* images (this corresponds to the commonly-used GIF application extension
* for "NETSCAPE 2.0 01"). The default is 1. A value of 0 means 'display
* repeatedly'
*/
public int repeatCount;
/*
* the set of ImageLoader event listeners, created on demand
*/
Vector imageLoaderListeners;
/**
* Construct a new empty ImageLoader.
*/
public ImageLoader() {
reset();
}
/**
* Resets the fields of the ImageLoader, except for the
* imageLoaderListeners
field.
*/
void reset() {
data = null;
logicalScreenWidth = 0;
logicalScreenHeight = 0;
backgroundPixel = -1;
repeatCount = 1;
}
/**
* Loads an array of ImageData
objects from the specified input
* stream. Throws an error if either an error occurs while loading the
* images, or if the images are not of a supported type. Returns the loaded
* image data array.
*
* @param stream
* the input stream to load the images from
* @return an array of ImageData
objects loaded from the
* specified input stream
*
* @exception IllegalArgumentException
*
* - ERROR_NULL_ARGUMENT - if the stream is null
*
* @exception SWTException
*
* - ERROR_IO - if an IO error occurs while reading from
* the stream
* - ERROR_INVALID_IMAGE - if the image stream contains
* invalid data
* - ERROR_UNSUPPORTED_FORMAT - if the image stream
* contains an unrecognized format
*
*/
// public ImageData[] load(InputStream stream) {
// if (stream == null)
// SWT.error(SWT.ERROR_NULL_ARGUMENT);
// reset();
// data = FileFormat.load(stream, this);
// return data;
// }
/**
* Loads an array of ImageData
objects from the file with the
* specified name. Throws an error if either an error occurs while loading
* the images, or if the images are not of a supported type. Returns the
* loaded image data array.
*
* @param filename
* the name of the file to load the images from
* @return an array of ImageData
objects loaded from the
* specified file
*
* @exception IllegalArgumentException
*
* - ERROR_NULL_ARGUMENT - if the file name is null
*
* @exception SWTException
*
* - ERROR_IO - if an IO error occurs while reading from
* the file
* - ERROR_INVALID_IMAGE - if the image file contains
* invalid data
* - ERROR_UNSUPPORTED_FORMAT - if the image file contains
* an unrecognized format
*
*/
public ImageData[] load(String filename) {
return null;
}
/**
* Saves the image data in this ImageLoader to the specified stream. The
* format parameter can have one of the following values:
*
* IMAGE_BMP
* - Windows BMP file format, no compression
* IMAGE_BMP_RLE
* - Windows BMP file format, RLE compression if appropriate
* IMAGE_GIF
* - GIF file format
* IMAGE_ICO
* - Windows ICO file format
* IMAGE_JPEG
* - JPEG file format
* IMAGE_PNG
* - PNG file format
*
*
* @param stream
* the output stream to write the images to
* @param format
* the format to write the images in
*
* @exception IllegalArgumentException
*
* - ERROR_NULL_ARGUMENT - if the stream is null
*
* @exception SWTException
*
* - ERROR_IO - if an IO error occurs while writing to the
* stream
* - ERROR_INVALID_IMAGE - if the image data contains
* invalid data
* - ERROR_UNSUPPORTED_FORMAT - if the image data cannot be
* saved to the requested format
*
*/
public void save(OutputStream stream, int format) {
if (stream == null)
SWT.error(SWT.ERROR_NULL_ARGUMENT);
FileFormat.save(stream, format, this);
}
/**
* Saves the image data in this ImageLoader to a file with the specified
* name. The format parameter can have one of the following values:
*
* IMAGE_BMP
* - Windows BMP file format, no compression
* IMAGE_BMP_RLE
* - Windows BMP file format, RLE compression if appropriate
* IMAGE_GIF
* - GIF file format
* IMAGE_ICO
* - Windows ICO file format
* IMAGE_JPEG
* - JPEG file format
* IMAGE_PNG
* - PNG file format
*
*
* @param filename
* the name of the file to write the images to
* @param format
* the format to write the images in
*
* @exception IllegalArgumentException
*
* - ERROR_NULL_ARGUMENT - if the file name is null
*
* @exception SWTException
*
* - ERROR_IO - if an IO error occurs while writing to the
* file
* - ERROR_INVALID_IMAGE - if the image data contains
* invalid data
* - ERROR_UNSUPPORTED_FORMAT - if the image data cannot be
* saved to the requested format
*
*/
public void save(String filename, int format) {
if (filename == null)
SWT.error(SWT.ERROR_NULL_ARGUMENT);
OutputStream stream = null;
try {
stream = Compatibility.newFileOutputStream(filename);
} catch (IOException e) {
SWT.error(SWT.ERROR_IO, e);
}
save(stream, format);
// try {
// stream.close();
// } catch (IOException e) {
// }
}
/**
* Adds the listener to the collection of listeners who will be notified
* when image data is either partially or completely loaded.
*
* An ImageLoaderListener should be added before invoking one of the
* receiver's load methods. The listener's imageDataLoaded
* method is called when image data has been partially loaded, as is
* supported by interlaced GIF/PNG or progressive JPEG images.
*
* @param listener
* the listener which should be notified
*
* @exception IllegalArgumentException
*
* - ERROR_NULL_ARGUMENT - if the listener is null
*
*
* @see ImageLoaderListener
* @see ImageLoaderEvent
*/
public void addImageLoaderListener(ImageLoaderListener listener) {
if (listener == null)
SWT.error(SWT.ERROR_NULL_ARGUMENT);
if (imageLoaderListeners == null) {
imageLoaderListeners = new Vector();
}
imageLoaderListeners.addElement(listener);
}
/**
* Removes the listener from the collection of listeners who will be
* notified when image data is either partially or completely loaded.
*
* @param listener
* the listener which should no longer be notified
*
* @exception IllegalArgumentException
*
* - ERROR_NULL_ARGUMENT - if the listener is null
*
*
* @see #addImageLoaderListener(ImageLoaderListener)
*/
public void removeImageLoaderListener(ImageLoaderListener listener) {
if (listener == null)
SWT.error(SWT.ERROR_NULL_ARGUMENT);
if (imageLoaderListeners == null)
return;
imageLoaderListeners.removeElement(listener);
}
/**
* Returns true
if the receiver has image loader listeners, and
* false
otherwise.
*
* @return true
if there are ImageLoaderListener
s,
* and false
otherwise
*
* @see #addImageLoaderListener(ImageLoaderListener)
* @see #removeImageLoaderListener(ImageLoaderListener)
*/
public boolean hasListeners() {
return imageLoaderListeners != null && imageLoaderListeners.size() > 0;
}
/**
* Notifies all image loader listeners that an image loader event has
* occurred. Pass the specified event object to each listener.
*
* @param event
* the ImageLoaderEvent
to send to each
* ImageLoaderListener
*/
public void notifyListeners(ImageLoaderEvent event) {
if (!hasListeners())
return;
int size = imageLoaderListeners.size();
for (int i = 0; i < size; i++) {
ImageLoaderListener listener = (ImageLoaderListener) imageLoaderListeners
.elementAt(i);
listener.imageDataLoaded(event);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy