pixelmed
MarkerSegmentDQT.java
Go to the documentation of this file.
1 /* Copyright (c) 2014, David A. Clunie DBA Pixelmed Publishing. All rights reserved. */
2 
3 package com.pixelmed.codec.jpeg;
4 
5 import java.util.Map;
6 
12 public class MarkerSegmentDQT {
13 
14  private static final String identString = "@(#) $Header: /userland/cvs/codec/com/pixelmed/codec/jpeg/MarkerSegmentDQT.java,v 1.2 2014/03/21 21:46:20 dclunie Exp $";
15 
16  private int nTables;
17 
18  private int[] QuantizationTableElementPrecision;
19  private int[] QuantizationTableIdentifier;
20  private int[][] QuantizationTableElement;
21 
22  public MarkerSegmentDQT(byte[] b,int length) throws Exception {
23  QuantizationTableElementPrecision = new int [4];
24  QuantizationTableIdentifier = new int [4];
25  QuantizationTableElement = new int [4][];
26 
27  nTables=0;
28  int offset=0;
29  while (length > 0) {
30  if (nTables >= 4) {
31  throw new Exception("Only 4 tables are permitted");
32  }
33 
34  QuantizationTableElementPrecision[nTables] = Utilities.extract8(b,offset) >> 4;
35  QuantizationTableIdentifier[nTables] = Utilities.extract8(b,offset) & 0x0f;
36  QuantizationTableElement[nTables] = new int[64];
37  ++offset; --length;
38 
39  for (int i=0; i<64; ++i) {
40  if (QuantizationTableElementPrecision[nTables] > 0) {
41  QuantizationTableElement[nTables][i] = Utilities.extract16be(b,offset);
42  offset+=2; length-=2;
43  }
44  else {
45  QuantizationTableElement[nTables][i] = Utilities.extract8(b,offset);
46  ++offset; --length;
47  }
48  }
49  ++nTables;
50  }
51  }
52 
53  public void addToMapByIdentifier(Map<String,QuantizationTable> qtByIdentifer) {
54  for (int t=0; t<nTables; ++t) {
55  int id = QuantizationTableIdentifier[t];
56  String key = Integer.toString(id);
57  qtByIdentifer.put(key,new QuantizationTable(id,QuantizationTableElementPrecision[t],QuantizationTableElement[t]));
58  }
59  }
60 
61  public String toString() {
62  StringBuffer buf = new StringBuffer();
63  buf.append("\n\tDQT:\n");
64  for (int t=0; t<nTables; ++t) {
65  buf.append("\t\t QuantizationTableElementPrecision = "+QuantizationTableElementPrecision[t]+"\n");
66  buf.append("\t\t QuantizationTableIdentifier = " +QuantizationTableIdentifier[t]+"\n");
67  for (int i=0; i<64; ++i) {
68  buf.append("\t\t\t QuantizationTableElement "+i+" = "+QuantizationTableElement[t][i]+"\n");
69  }
70  }
71  return buf.toString();
72  }
73 
74 }
75 
com.pixelmed.codec.jpeg.Utilities.extract16be
static final int extract16be(byte[] b, int offset)
Definition: Utilities.java:46
com.pixelmed.codec.jpeg.MarkerSegmentDQT.MarkerSegmentDQT
MarkerSegmentDQT(byte[] b, int length)
Definition: MarkerSegmentDQT.java:22
com.pixelmed.codec.jpeg.Utilities.extract8
static final int extract8(byte[] b, int offset)
Definition: Utilities.java:42
com.pixelmed.codec.jpeg.QuantizationTable
Definition: QuantizationTable.java:10
com.pixelmed.codec.jpeg.Utilities
Definition: Utilities.java:13
com.pixelmed.codec.jpeg.MarkerSegmentDQT.addToMapByIdentifier
void addToMapByIdentifier(Map< String, QuantizationTable > qtByIdentifer)
Definition: MarkerSegmentDQT.java:53
com.pixelmed.codec.jpeg.MarkerSegmentDQT.toString
String toString()
Definition: MarkerSegmentDQT.java:61
com.pixelmed.codec.jpeg.MarkerSegmentDQT
Definition: MarkerSegmentDQT.java:12