public class BMPCodec extends ImageCodec
Typical file extensions are .bmp and .rle
(the latter is only used for compressed files).
This codec supports the bounds concept for loading and saving.
BilevelImage
can be given to the codec and it will load the image to that object
(if the image's resolution is sufficient).
If no image object is given to the codec, a new
MemoryBilevelImage will be created.Paletted8Image object.
This requires 50 % more space than is necessary, but there is
no dedicated 4 bit image data class in JIU.Paletted8Image object.RGB24Image object.
BilevelImage objects are stored as 1 bit per pixel BMP files.Gray8Image and
Paletted8Image objects are stored as
paletted 8 bits per pixel files.
It doesn't really matter how many entries the palette has, the BMP file's
palette will always have 256 entries, filled up with zero entries if necessary.RGB24Image objects are stored as 24 bpp BMP files.
InputStream, OutputStream,
DataInput, DataOutput,
RandomAccessFile).
The RLE-compressed BMP files that I could test this codec on seem to
have an end-of-line code at the end of every line instead of relying
on the decoder to know when it has unpacked enough bytes for a line.
Whenever this codec encounters an EOL symbol and has a current column
value of 0, the EOL is ignored.
BMPCodec codec = new BMPCodec();
codec.setImage(image);
codec.setFile("out.bmp", CodecMode.SAVE);
codec.process();
codec.close();
Read an image from a BMP file.
BMPCodec codec = new BMPCodec();
codec.setFile("image.bmp", CodecMode.LOAD);
codec.process();
codec.close();
PixelImage image = codec.getImage();
| Modifier and Type | Field and Description |
|---|---|
private int |
colorDepth |
private int |
compression |
private int |
dataOffset |
private int |
imageHeight |
private int |
imageWidth |
private java.io.DataInput |
in |
private java.io.DataOutput |
out |
private Palette |
palette |
| Constructor and Description |
|---|
BMPCodec() |
| Modifier and Type | Method and Description |
|---|---|
java.lang.String[] |
getFileExtensions()
Returns all file extensions that are typical for this file format.
|
java.lang.String |
getFormatName()
Returns the name of the file format supported by this codec.
|
java.lang.String[] |
getMimeTypes()
Return the MIME
(Multipurpose Internet Mail Extensions) type strings for this format, or
null
if none are available. |
boolean |
isLoadingSupported()
Returns if this codec is able to load images in the file format supported by this codec.
|
boolean |
isSavingSupported()
Returns if this codec is able to save images in the file format supported by this codec.
|
private void |
load() |
private void |
loadCompressedPaletted4Stream() |
private void |
loadCompressedPaletted8Stream() |
private void |
loadHeader() |
private void |
loadStream() |
private void |
loadUncompressedBilevelStream() |
private void |
loadUncompressedPaletted4Stream() |
private void |
loadUncompressedPaletted8Stream() |
private void |
loadUncompressedRgb24Stream() |
private void |
loadUncompressedStream() |
void |
process()
This method does the actual work of the operation.
|
private void |
save() |
java.lang.String |
suggestFileExtension(PixelImage image)
Attempts to suggest a filename extension.
|
private void |
writeHeader(PixelImage image,
int filesize,
int offset,
int numBits) |
private void |
writeInt(int value) |
private void |
writePalette()
Write the palette associated with the image getImage().
|
private void |
writeShort(int value) |
private void |
writeStream() |
appendComment, checkBounds, checkImageResolution, close, getBoundsHeight, getBoundsWidth, getBoundsX1, getBoundsX2, getBoundsY1, getBoundsY2, getComment, getDataInput, getDataOutput, getDpiX, getDpiY, getImage, getImageIndex, getInputAsDataInput, getInputStream, getMode, getNumComments, getOutputAsDataOutput, getOutputStream, getRandomAccessFile, hasBounds, initModeFromIOObjects, isRowRequired, isTileRequired, removeAllComments, removeBounds, setBounds, setBoundsIfNecessary, setDataInput, setDataOutput, setDpi, setFile, setFile, setImage, setImageIndex, setInputStream, setOutputStream, setRandomAccessFileaddProgressListener, addProgressListeners, getAbort, removeProgressListener, setAbort, setProgress, setProgressprivate int colorDepth
private int compression
private int dataOffset
private int imageHeight
private int imageWidth
private java.io.DataInput in
private java.io.DataOutput out
private Palette palette
public java.lang.String[] getFileExtensions()
ImageCodecnull.
The file extension strings should include a leading dot
and are supposed to be lower case (if that is allowed for
the given file format).
Example: {".jpg", ".jpeg"} for the JPEG file format.getFileExtensions in class ImageCodecpublic java.lang.String getFormatName()
ImageCodecImageCodec must override this method.
When overriding, leave out any words in a particular language so
that this format name can be understood by everyone.
Usually it is enough to return the format creator plus a typical
abbreviation, e.g. Microsoft BMP or Portable Anymap (PNM).getFormatName in class ImageCodecpublic java.lang.String[] getMimeTypes()
ImageCodecnull
if none are available.getMimeTypes in class ImageCodecpublic boolean isLoadingSupported()
ImageCodectrue is returned this does not necessarily mean that all files in this
format can be read, but at least some.isLoadingSupported in class ImageCodecpublic boolean isSavingSupported()
ImageCodectrue is returned this does not necessarily mean that all types files in this
format can be written, but at least some.isSavingSupported in class ImageCodecprivate void load()
throws MissingParameterException,
OperationFailedException,
UnsupportedTypeException,
WrongFileFormatException
private void loadCompressedPaletted4Stream()
throws java.io.IOException
java.io.IOExceptionprivate void loadCompressedPaletted8Stream()
throws java.io.IOException
java.io.IOExceptionprivate void loadHeader()
throws java.io.IOException,
MissingParameterException,
OperationFailedException,
UnsupportedTypeException,
WrongFileFormatException
java.io.IOExceptionMissingParameterExceptionOperationFailedExceptionUnsupportedTypeExceptionWrongFileFormatExceptionprivate void loadStream()
throws java.io.IOException,
MissingParameterException,
OperationFailedException,
UnsupportedTypeException
java.io.IOExceptionMissingParameterExceptionOperationFailedExceptionUnsupportedTypeExceptionprivate void loadUncompressedBilevelStream()
throws java.io.IOException,
OperationFailedException
java.io.IOExceptionOperationFailedExceptionprivate void loadUncompressedPaletted4Stream()
throws java.io.IOException
java.io.IOExceptionprivate void loadUncompressedPaletted8Stream()
throws java.io.IOException
java.io.IOExceptionprivate void loadUncompressedRgb24Stream()
throws java.io.IOException
java.io.IOExceptionprivate void loadUncompressedStream()
throws java.io.IOException,
OperationFailedException
java.io.IOExceptionOperationFailedExceptionpublic void process()
throws MissingParameterException,
OperationFailedException
Operationprocess in class OperationMissingParameterException - if any mandatory parameter was not given to the operationWrongParameterException - if at least one of the input parameters was
not initialized appropriately (values out of the valid interval, etc.)OperationFailedExceptionprivate void save()
throws MissingParameterException,
OperationFailedException,
UnsupportedTypeException
public java.lang.String suggestFileExtension(PixelImage image)
ImageCodecPNMCodec).
This default implementation always returns null.suggestFileExtension in class ImageCodecimage - the image that is to be written to a filenull if no file extension can be recommendedprivate void writeHeader(PixelImage image, int filesize, int offset, int numBits) throws java.io.IOException
java.io.IOExceptionprivate void writeInt(int value)
throws java.io.IOException
java.io.IOExceptionprivate void writePalette()
throws java.io.IOException
java.io.IOExceptionprivate void writeShort(int value)
throws java.io.IOException
java.io.IOExceptionprivate void writeStream()
throws java.io.IOException
java.io.IOException