Overview | Package | Class | Tree | Deprecated | Index | Help
| Copyright 2012-04-26 Werner Randelshofer
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.monte.media.pbm
Class PBMDecoder

    java.lang.Object
      org.monte.media.pbm.PBMDecoder

All Implemented Interfaces:
  IFFVisitor

    public class PBMDecoder

extends java.lang.Object
implements IFFVisitor

Creates Image objects by reading an IFF PBM stream.

PBM regular expression

     PBM ::= "FORM" #{ "PBM" BMHD [CMAP] [GRAB] [DEST] [SPRT] [CAMG] CRNG* CCRT* [BODY] }

     BMHD ::= "BMHD" #{ BitMapHeader }
     CMAP ::= "CMAP" #{ (red green blue)* } [0]
     GRAB ::= "GRAB" #{ Point2D }
     DEST ::= "DEST" #{ DestMerge }
     SPRT ::= "SPRT" #{ SpritePrecedence }
     CAMG ::= "CAMG" #{ LONG }

     CRNG ::= "CRNG" #{ CRange }
     CCRT ::= "CCRT" #{ CycleInfo }
     BODY ::= "BODY" #{ UBYTE* } [0]

The token "#" represents a `ckSize` LONG count of the following braced data bytes. E.g., a BMHD's "#" should equal `sizeof(BitMapHeader)`. Literal strings are shown in "quotes", [square bracket items] are optional, and "*" means 0 or more repetitions. A sometimes-needed pad byte is shown as "[0]".

Version:
  1.6 2010-08-02 Added support for CRNG and DRNG chunks.
  1.5.1 2010-07-03 Improved performance of byterun1 decoder.
  1.0 2005-04-05 Created.
Author:
  Werner Randelshofer, Hausmatt 10, CH-6405 Immensee, Switzerland

Field Summary
`protected static int` | `BMHD_ID`
`protected int` | `bmhdCompression`
`protected int` | `bmhdHeight` Raster width_ and heigth in pixels
`protected int` | `bmhdMasking`
`protected int` | `bmhdNbPlanes` Number of source bitplanes.
`protected int` | `bmhdPageHeight` Source "page" size in pixels.
`protected int` | `bmhdPageWidth` Source "page" size in pixels.
`protected int` | `bmhdTransparentColor` Transparent "color number" (sort of).
`protected int` | `bmhdWidth` Raster width_ and heigth in pixels
`protected int` | `bmhdXAspect` Pixel aspect, a ratio width : height
`protected int` | `bmhdXPosition` pixel position for this image
`protected int` | `bmhdYAspect` Pixel aspect, a ratio width : height
`protected int` | `bmhdYPosition` pixel position for this image
`protected static int` | `BODY_ID`
`protected static int` | `CMAP_ID`
`protected java.awt.image.ColorModel` | `cmapColorModel` CMAP data.
`protected static int` | `CMP_BYTE_RUN_1` PBM BMHD chunk: compression algorithm.
`protected static int` | `CMP_NONE` PBM BMHD chunk: compression algorithm.
`protected static int` | `CRNG_ID`
`protected static int` | `DRNG_ID`
`protected java.io.InputStream` | `inputStream` Input stream to decode from.
`protected java.net.URL` | `location` URL to get the input stream from.
`protected ColorCyclingMemoryImageSource` | `memoryImageSource` BODY data
`protected static int` | `MSK_HAS_MASK` PBM BMHD chunk: masking technique.
`protected static int` | `MSK_HAS_TRANSPARENT_COLOR` PBM BMHD chunk: masking technique.
`protected static int` | `MSK_LASSO` PBM BMHD chunk: masking technique.
`protected static int` | `MSK_NONE` PBM BMHD chunk: masking technique.
`protected static int` | `PBM_ID` Chunk ID's.
`protected java.util.Hashtable` | `properties` Properties.
`protected java.util.ArrayList<ColorCyclingMemoryImageSource>` | `sources` Stores all the PBM pictures found during decoding as an instance of MemoryImageSource.

Constructor Summary
`PBMDecoder(java.io.InputStream in)` Constructors
`PBMDecoder(java.net.URL location)`

Method Summary
`protected void` | `decodeBMHD(IFFChunk chunk)` Decodes the bitmap header (PBM BMHD).
`protected void` | `decodeBODY(IFFChunk chunk)`
`protected void` | `decodeCMAP(IFFChunk chunk)`
`protected ColorCycle` | `decodeCRNG(IFFChunk chunk)` Decodes the color range cycling (ILBM CRNG).
`protected ColorCycle` | `decodeDRNG(IFFChunk chunk)` Decodes the DPaint IV enhanced color cycle chunk (ILBM DRNG)
`void` | `enterGroup(IFFChunk chunk)`
`void` | `leaveGroup(IFFChunk chunk)`
`java.util.ArrayList<ColorCyclingMemoryImageSource>` | `produce()` Processes the input stream and creates a vector of MemoryImageSource instances.
`void` | `registerChunks(IFFParser iff)`
`static int` | `unpackByteRun1(byte[] in, byte[] out)` ByteRun1 run decoder.
`void` | `visitChunk(IFFChunk group, IFFChunk chunk)`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### PBM_ID

    protected static final int PBM_ID

  Chunk ID's.

### BMHD_ID

    protected static final int BMHD_ID

### CMAP_ID

    protected static final int CMAP_ID

### CRNG_ID

    protected static final int CRNG_ID

### DRNG_ID

    protected static final int DRNG_ID

### BODY_ID

    protected static final int BODY_ID

### MSK_NONE

    protected static final int MSK_NONE

  PBM BMHD chunk: masking technique.

  See Also:
    Constant Field Values

### MSK_HAS_MASK

    protected static final int MSK_HAS_MASK

  PBM BMHD chunk: masking technique.

  See Also:
    Constant Field Values

### MSK_HAS_TRANSPARENT_COLOR

    protected static final int MSK_HAS_TRANSPARENT_COLOR

  PBM BMHD chunk: masking technique.

  See Also:
    Constant Field Values

### MSK_LASSO

    protected static final int MSK_LASSO

  PBM BMHD chunk: masking technique.

  See Also:
    Constant Field Values

### CMP_NONE

    protected static final int CMP_NONE

  PBM BMHD chunk: compression algorithm.

  See Also:
    Constant Field Values

### CMP_BYTE_RUN_1

    protected static final int CMP_BYTE_RUN_1

  PBM BMHD chunk: compression algorithm.

  See Also:
    Constant Field Values

### inputStream

    protected java.io.InputStream inputStream

  Input stream to decode from.

### location

    protected java.net.URL location

  URL to get the input stream from.

### sources

    protected java.util.ArrayList<ColorCyclingMemoryImageSource> sources

  Stores all the PBM pictures found during decoding as an instance of MemoryImageSource.

### properties

    protected java.util.Hashtable properties

  Properties.

### bmhdWidth

    protected int bmhdWidth

  Raster width_ and heigth in pixels

### bmhdHeight

    protected int bmhdHeight

  Raster width_ and heigth in pixels

### bmhdXPosition

    protected int bmhdXPosition

  pixel position for this image

### bmhdYPosition

    protected int bmhdYPosition

  pixel position for this image

### bmhdNbPlanes

    protected int bmhdNbPlanes

  Number of source bitplanes.

### bmhdMasking

    protected int bmhdMasking

### bmhdCompression

    protected int bmhdCompression

### bmhdTransparentColor

    protected int bmhdTransparentColor

  Transparent "color number" (sort of).

### bmhdXAspect

    protected int bmhdXAspect

  Pixel aspect, a ratio width : height

### bmhdYAspect

    protected int bmhdYAspect

  Pixel aspect, a ratio width : height

### bmhdPageWidth

    protected int bmhdPageWidth

  Source "page" size in pixels.

### bmhdPageHeight

    protected int bmhdPageHeight

  Source "page" size in pixels.

### cmapColorModel

    protected java.awt.image.ColorModel cmapColorModel

  CMAP data.

### memoryImageSource

    protected ColorCyclingMemoryImageSource memoryImageSource

  BODY data

Constructor Detail

### PBMDecoder

    public PBMDecoder(java.io.InputStream in)

  Constructors

### PBMDecoder

    public PBMDecoder(java.net.URL location)

Method Detail

### produce

    public java.util.ArrayList<ColorCyclingMemoryImageSource> produce()
                                                               throws java.io.IOException

  Processes the input stream and creates a vector of MemoryImageSource instances.

  Returns:
    A vector of java.awt.img.MemoryImageSource.
  Throws:
    `java.io.IOException`

### registerChunks

    public void registerChunks(IFFParser iff)

### enterGroup

    public void enterGroup(IFFChunk chunk)

  Specified by:
    `enterGroup` in interface `IFFVisitor`

### leaveGroup

    public void leaveGroup(IFFChunk chunk)

  Specified by:
    `leaveGroup` in interface `IFFVisitor`

### visitChunk

    public void visitChunk(IFFChunk group,
                           IFFChunk chunk)
                    throws ParseException,
                           AbortException

  Specified by:
    `visitChunk` in interface `IFFVisitor`
  Throws:
    `ParseException`
    `AbortException`

### decodeBMHD

    protected void decodeBMHD(IFFChunk chunk)
                       throws ParseException

  Decodes the bitmap header (PBM BMHD).

       typedef UBYTE Masking; // Choice of masking technique

       #define mskNone                 0
       #define mskHasMask              1
       #define mskHasTransparentColor  2
       #define mskLasso                3

       typedef UBYTE Compression; // Choice of compression algorithm
           // applied to the rows of all source and mask planes.
           // "cmpByteRun1" is the byte run encoding. Do not compress
           // accross rows!
       #define cmpNone      0
       #define cmpByteRun1  1

       typedef struct {
         UWORD       w, h; // raster width & height in pixels
         WORD        x, y; // pixel position for this image
         UBYTE       nbPlanes; // # source bitplanes
         Masking     masking;
         Compression compression;
         UBYTE       pad1;     // unused; ignore on read, write as 0
         UWORD       transparentColor; // transparent "color number" (sort of)
         UBYTE       xAspect, yAspect; // pixel aspect, a ratio width : height
         WORD        pageWidth, pageHeight; // source "page" size in pixels
         } BitmapHeader;

  Throws:
    `ParseException`

### decodeCMAP

    protected void decodeCMAP(IFFChunk chunk)
                       throws ParseException

  Throws:
    `ParseException`

### decodeCRNG

    protected ColorCycle decodeCRNG(IFFChunk chunk)
                             throws ParseException

  Decodes the color range cycling (ILBM CRNG).

       #define RNG_NORATE  36   // Dpaint uses this rate to mean non-active
        set {
        active = 1, reverse = 2
        } crngActive;

        // A CRange is store in a CRNG chunk.
        typedef struct {
        WORD  pad1;              // reserved for future use; store 0 here *
        WORD  rate;              // 60/sec=16384, 30/sec=8192, 1/sec=16384/60=273
        WORD set crngActive flags;     // bit0 set = active, bit 1 set = reverse
        UBYTE low; UBYTE high;         // lower and upper color registers selected
        } ilbmColorRegisterRangeChunk;

  Throws:
    `ParseException`

### decodeDRNG

    protected ColorCycle decodeDRNG(IFFChunk chunk)
                             throws ParseException

  Decodes the DPaint IV enhanced color cycle chunk (ILBM DRNG)

  The RNG_ACTIVE flag is set when the range is cyclable. A range should only have the RNG _ACTIVE if it:

  1. contains at least one color register
  2. has a defined rate
  3. has more than one color and/or color register

       ILBM DRNG DPaint IV enhanced color cycle chunk
       --------------------------------------------

       set {
           RNG_ACTIVE=1,RNG_DP_RESERVED=4
       } drngFlags;

       /* True color cell * /
       typedef struct {
           UBYTE cell;
           UBYTE r;
           UBYTE g;
           UBYTE b;
       } ilbmDRNGDColor;

       /* Color register cell * /
       typedef struct {
           UBYTE cell;
           UBYTE index;
       } ilbmDRNGDIndex;

       /* DRNG chunk. * /
       typedef struct {
           UBYTE min; /* min cell value * /
           UBYTE max; /* max cell value * /
           UWORD rate; /* color cycling rate, 16384 = 60 steps/second * /
           UWORD set drngFlags flags; /* 1=RNG_ACTIVE, 4=RNG_DP_RESERVED * /
           UBYTE ntrue; /* number of DColorCell structs to follow * /
           UBYTE ntregs; /* number of DIndexCell structs to follow * /
           ilbmDRNGDColor[ntrue] trueColorCells;
           ilbmDRNGDIndex[ntregs] colorRegisterCells;
       } ilbmDRangeChunk;

  Throws:
    `ParseException`

### decodeBODY

    protected void decodeBODY(IFFChunk chunk)
                       throws ParseException

  Throws:
    `ParseException`

### unpackByteRun1

    public static int unpackByteRun1(byte[] in,
                                     byte[] out)
                              throws ParseException

  ByteRun1 run decoder.

  The run encoding scheme by byteRun1 is best described by pseudo code for the decoder Unpacker (called UnPackBits in the Macintosh toolbox.

       UnPacker:
        LOOP until produced the desired number of bytes
            Read the next source byte into n
            SELECT n FROM
                [0..127] => copy the next n+1 bytes literally
                [-1..-127] => replicate the next byte -n+1 times
                -128    => no operation
            ENDCASE;
         ENDLOOP;

  Parameters:
    `in` -
    `out` -
  Throws:
    `ParseException`

Overview | Package | Class | Tree | Deprecated | Index | Help
| Copyright 2012-04-26 Werner Randelshofer
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD