01: /*
02: * $RCSfile: TIFFLSBCompressor.java,v $
03: *
04: *
05: * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.
06: *
07: * Redistribution and use in source and binary forms, with or without
08: * modification, are permitted provided that the following conditions
09: * are met:
10: *
11: * - Redistribution of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: *
14: * - Redistribution in binary form must reproduce the above copyright
15: * notice, this list of conditions and the following disclaimer in
16: * the documentation and/or other materials provided with the
17: * distribution.
18: *
19: * Neither the name of Sun Microsystems, Inc. or the names of
20: * contributors may be used to endorse or promote products derived
21: * from this software without specific prior written permission.
22: *
23: * This software is provided "AS IS," without a warranty of any
24: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
25: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
26: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
27: * EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
28: * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
29: * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
30: * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
31: * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
32: * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
33: * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
34: * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
35: * POSSIBILITY OF SUCH DAMAGES.
36: *
37: * You acknowledge that this software is not designed or intended for
38: * use in the design, construction, operation or maintenance of any
39: * nuclear facility.
40: *
41: * $Revision: 1.1 $
42: * $Date: 2005/02/11 05:01:47 $
43: * $State: Exp $
44: */
45: package com.sun.media.imageioimpl.plugins.tiff;
46:
47: import com.sun.media.imageio.plugins.tiff.BaselineTIFFTagSet;
48: import com.sun.media.imageio.plugins.tiff.TIFFCompressor;
49: import java.io.IOException;
50:
51: /**
52: * Uncompressed data with LSB-to-MSB fill order.
53: */
54: public class TIFFLSBCompressor extends TIFFCompressor {
55:
56: public TIFFLSBCompressor() {
57: super ("", BaselineTIFFTagSet.COMPRESSION_NONE, true);
58: }
59:
60: public int encode(byte[] b, int off, int width, int height,
61: int[] bitsPerSample, int scanlineStride) throws IOException {
62: int bitsPerPixel = 0;
63: for (int i = 0; i < bitsPerSample.length; i++) {
64: bitsPerPixel += bitsPerSample[i];
65: }
66: int bytesPerRow = (bitsPerPixel * width + 7) / 8;
67: byte[] compData = new byte[bytesPerRow];
68: byte[] flipTable = TIFFFaxDecompressor.flipTable;
69: for (int row = 0; row < height; row++) {
70: System.arraycopy(b, off, compData, 0, bytesPerRow);
71: for (int j = 0; j < bytesPerRow; j++) {
72: compData[j] = flipTable[compData[j] & 0xff];
73: }
74: stream.write(compData, 0, bytesPerRow);
75: off += scanlineStride;
76: }
77: return height * bytesPerRow;
78: }
79: }
|