001: /*
002: * $RCSfile: PackedImageData.java,v $
003: *
004: * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
005: *
006: * Use is subject to license terms.
007: *
008: * $Revision: 1.1 $
009: * $Date: 2005/02/11 04:57:14 $
010: * $State: Exp $
011: */
012: package javax.media.jai;
013:
014: import java.awt.Rectangle;
015: import java.awt.image.DataBuffer;
016: import java.awt.image.Raster;
017:
018: /**
019: * This class is used by <code>PixelAccessor</code> to store packed
020: * image data along with access information. The data must be single
021: * banded and one bit in depth, and are stored in a one-dimensional
022: * <code>byte</code> array, with eight pixels packed into one
023: * <code>byte</code>. To insure that each scanline has an integral number
024: * of bytes the last byte may be padded with zeros.
025: *
026: * @since JAI 1.1
027: *
028: */
029: public final class PackedImageData {
030:
031: /** The <code>Raster</code> containing the pixel data. */
032: public final Raster raster;
033:
034: /**
035: * The rectangular region within the <code>Raster</code> from which the
036: * data are to be retrieved.
037: */
038: public final Rectangle rect;
039:
040: /** The data array supplied to store the converted data. */
041: public final byte[] data;
042:
043: /** The number of array elements in each scanline. */
044: public final int lineStride;
045:
046: /**
047: * The number of array elements from the beginning of the data array
048: * to the first pixel of the <code>Rectangle</code>. Since there is
049: * only one sample per pixel, there is only one offset value.
050: */
051: public final int offset;
052:
053: /**
054: * The number of bits into the byte that contains the first pixel
055: * of each scanline. This is the same for every scanline. Note
056: * that the bit offset is counted from left to right in a byte. That
057: * is, the most significant bit (bit 7) has an offset of 0.
058: */
059: public final int bitOffset;
060:
061: /** Whether the data have been coerced to have zero offsets. */
062: public final boolean coercedZeroOffset;
063:
064: /**
065: * Indicates whether the <code>PixelAccessor</code> can and must set the
066: * data back into the <code>Raster</code>. If the data does not need
067: * to be copied back to the <code>Raster</code>, this variable should be
068: * set to <code>false</code>. Only destinations can be set.
069: */
070: public final boolean convertToDest;
071:
072: /** Constructs a PackedImageRaster.
073: * @param raster The <code>Raster</code> containing the pixel data.
074: * @param rect The rectangular region from which the data are extracted.
075: * @param data The byte data array supplied to store the data.
076: * @param lineStride The data array increment to move from the coordinate
077: * x of line i to coordinate x of line i+1.
078: * @param offset The number of bytes from the start of the data array
079: * at which to store the first pixel of the rectangle.
080: * @param bitOffset The number of bits into the byte that contains the
081: * first pixel of each scanline. This is the same for
082: * every scanline. Note that the bit offset is counted
083: * from left to right in a byte. That is, the most
084: * significant bit of a byte (bit 7) has an offset of 0.
085: * @param coercedZeroOffset Whether the data have been coerced to
086: * have zero offsets.
087: * @param convertToDest A <code>boolean</code> indicating whether the data
088: * can and must be set back into the
089: * <code>Raster</code>. This applies only to
090: * destinations.
091: */
092: public PackedImageData(Raster raster, Rectangle rect, byte[] data,
093: int lineStride, int offset, int bitOffset,
094: boolean coercedZeroOffset, boolean convertToDest) {
095: this.raster = raster;
096: this.rect = rect;
097: this.data = data;
098: this.lineStride = lineStride;
099: this.offset = offset;
100: this.bitOffset = bitOffset;
101: this.coercedZeroOffset = coercedZeroOffset;
102: this.convertToDest = convertToDest;
103: }
104: }
|