USGS

Isis 3.0 Object Programmers' Reference

Home

JP2Exporter.cpp
1 #include "JP2Exporter.h"
2 
3 #include "Buffer.h"
4 #include "FileName.h"
5 #include "IException.h"
6 #include "IString.h"
7 #include "JP2Encoder.h"
8 
9 using namespace Isis;
10 
11 
12 namespace Isis {
17  m_encoder = NULL;
18  m_buffer = NULL;
19 
20  setExtension("jp2");
21  }
22 
23 
28  delete m_encoder;
29  m_encoder = NULL;
30 
31  delete [] m_buffer;
32  m_buffer = NULL;
33  }
34 
35 
41  PixelType type = pixelType();
42  int mult = (type == Isis::UnsignedByte) ? 1 : 2;
43 
44  m_buffer = new char* [bands()];
45  for (int i = 0; i < bands(); i++)
46  m_buffer[i] = new char[samples() * mult];
47  }
48 
49 
57  void JP2Exporter::write(FileName outputName, int quality) {
58  PixelType type = pixelType();
59  m_encoder = new JP2Encoder(
60  outputName.expanded(), samples(), lines(), bands(), type);
62 
63  ImageExporter::write(outputName, quality);
64  }
65 
66 
74  void JP2Exporter::setBuffer(int s, int b, int dn) const {
75  PixelType type = pixelType();
76  switch (type) {
77  case UnsignedByte:
78  ((unsigned char *) m_buffer[b])[s] = (unsigned char) dn;
79  break;
80  case SignedWord:
81  ((short int *) m_buffer[b])[s] = (short int) dn;
82  break;
83  case UnsignedWord:
84  ((short unsigned int *) m_buffer[b])[s] = (short unsigned int) dn;
85  break;
86  default:
88  "Invalid pixel type for data [" + toString(type) + "]",
89  _FILEINFO_);
90  }
91  }
92 
93 
99  void JP2Exporter::writeLine(int l) const {
100  PixelType type = pixelType();
101  if (type == Isis::UnsignedByte)
102  m_encoder->Write((unsigned char **) m_buffer);
103  else
104  m_encoder->Write((short int **) m_buffer);
105  }
106 
107 
115  bool JP2Exporter::canWriteFormat(QString format) {
116  return format == "jp2";
117  }
118 };
119