1 package nom.tam.image.compression.tile;
2
3 import nom.tam.fits.FitsException;
4 import nom.tam.fits.Header;
5 import nom.tam.image.tile.operation.ITileOperationInitialisation;
6 import nom.tam.image.tile.operation.TileArea;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 import static nom.tam.image.compression.tile.TileCompressionType.COMPRESSED;
40 import static nom.tam.image.compression.tile.TileCompressionType.GZIP_COMPRESSED;
41 import static nom.tam.image.compression.tile.TileCompressionType.UNCOMPRESSED;
42
43 final class TileDecompressorInitialisation implements ITileOperationInitialisation<TileCompressionOperation> {
44
45 private final Object[] uncompressed;
46
47 private final Object[] compressed;
48
49 private final Object[] gzipCompressed;
50
51 private final Header header;
52
53 private final TiledImageCompressionOperation imageTilesOperation;
54
55 private int compressedOffset = 0;
56
57 protected TileDecompressorInitialisation(TiledImageCompressionOperation imageTilesOperation, Object[] uncompressed,
58 Object[] compressed, Object[] gzipCompressed, Header header) {
59 this.imageTilesOperation = imageTilesOperation;
60 this.uncompressed = uncompressed;
61 this.compressed = compressed;
62 this.gzipCompressed = gzipCompressed;
63 this.header = header;
64 }
65
66 @Override
67 public TileCompressionOperation createTileOperation(int tileIndex, TileArea area) {
68 return new TileDecompressor(imageTilesOperation, tileIndex, area);
69 }
70
71 @Override
72 public void init(TileCompressionOperation tileOperation) {
73 tileOperation.setCompressedOffset(compressedOffset)
74 .setCompressed(compressed != null ? compressed[tileOperation.getTileIndex()] : null, COMPRESSED)
75 .setCompressed(uncompressed != null ? uncompressed[tileOperation.getTileIndex()] : null, UNCOMPRESSED)
76 .setCompressed(gzipCompressed != null ? gzipCompressed[tileOperation.getTileIndex()] : null,
77 GZIP_COMPRESSED);
78 tileOperation.createImageNullPixelMask(imageTilesOperation.getImageNullPixelMask());
79 compressedOffset += tileOperation.getPixelSize();
80 }
81
82 @Override
83 public void tileCount(int tileCount) throws FitsException {
84 imageTilesOperation.compressOptions().getCompressionParameters().initializeColumns(header,
85 imageTilesOperation.getBinaryTable(), tileCount);
86 }
87 }