Commit d9e06b14 authored by Tyler Wilson's avatar Tyler Wilson
Browse files

Added support for unsigned int special pixels in CubeIoHandler class. References #971

parent 4c6de316
Loading
Loading
Loading
Loading
+84 −0
Original line number Diff line number Diff line
@@ -1508,6 +1508,40 @@ namespace Isis {
              ((unsigned short *)buffersRawBuf)[bufferIndex] = raw;
            }

            else if(m_pixelType == UnsignedInteger) {

              unsigned int raw = ((unsigned int *)chunkBuf)[chunkIndex];
              if(m_byteSwapper)
                raw = m_byteSwapper->Uint32_t(&raw);

              if(raw >= VALID_MINUI4) {
                bufferVal = (double) raw * m_multiplier + m_base;
              }
              else if (raw > VALID_MAXUI4) {
                if(raw == HIGH_INSTR_SATUI4)
                  bufferVal = HIGH_INSTR_SAT8;
                else if(raw == HIGH_REPR_SATUI4)
                  bufferVal = HIGH_REPR_SAT8;
                else
                  bufferVal = LOW_REPR_SAT8;
              }
              else {
                if(raw == NULLUI4)
                  bufferVal = NULL8;
                else if(raw == LOW_INSTR_SATUI4)
                  bufferVal = LOW_INSTR_SAT8;
                else if(raw == LOW_REPR_SATUI4)
                  bufferVal = LOW_REPR_SAT8;
                else
                  bufferVal = LOW_REPR_SAT8;
              }

              ((unsigned int *)buffersRawBuf)[bufferIndex] = raw;



            }

            else if(m_pixelType == UnsignedByte) {
              unsigned char raw = ((unsigned char *)chunkBuf)[chunkIndex];

@@ -1626,6 +1660,7 @@ namespace Isis {
              ((float *)chunkBuf)[chunkIndex] =
                  m_byteSwapper ? m_byteSwapper->Float(&raw) : raw;
            }

            else if(m_pixelType == SignedWord) {
              short raw;

@@ -1670,6 +1705,55 @@ namespace Isis {
              ((short *)chunkBuf)[chunkIndex] =
                  m_byteSwapper ? m_byteSwapper->ShortInt(&raw) : raw;
            }

            else if(m_pixelType == UnsignedInteger) {

              unsigned int raw;

              if(bufferVal >= VALID_MINUI4) {
                double filePixelValueDbl = (bufferVal - m_base) /
                    m_multiplier;
                if(filePixelValueDbl < VALID_MINUI4 - 0.5) {
                  raw = LOW_REPR_SATUI4;
                }
                if(filePixelValueDbl > VALID_MAXUI4) {
                  raw = HIGH_REPR_SATUI4;
                }
                else {
                  unsigned int filePixelValue = (unsigned int)round(filePixelValueDbl);

                  if(filePixelValue < VALID_MINUI4) {
                    raw = LOW_REPR_SATUI4;
                  }
                  else if(filePixelValue > VALID_MAXUI4) {
                    raw = HIGH_REPR_SATUI4;
                  }
                  else {
                    raw = filePixelValue;
                  }
                }
              }
              else {
                if(bufferVal == NULLUI4)
                  raw = NULLUI4;
                else if(bufferVal == LOW_INSTR_SATUI4)
                  raw = LOW_INSTR_SATUI4;
                else if(bufferVal == LOW_REPR_SATUI4)
                  raw = LOW_REPR_SATUI4;
                else if(bufferVal == HIGH_INSTR_SATUI4)
                  raw = HIGH_INSTR_SATUI4;
                else if(bufferVal == HIGH_REPR_SATUI4)
                  raw = HIGH_REPR_SATUI4;
                else
                  raw = LOW_REPR_SATUI4;
              }

              ((unsigned int *)chunkBuf)[chunkIndex] =
                  m_byteSwapper ? m_byteSwapper->Uint32_t(&raw) : raw;

            }


            else if(m_pixelType == UnsignedWord) {
              unsigned short raw;

+3 −0
Original line number Diff line number Diff line
@@ -116,6 +116,9 @@ namespace Isis {
   *                           implementation causing warnings in clang. Part of OS X 10.11 porting.
   *                           QPair forward declaration now properly claims it as a struct.
   *   @history 2017-09-22 Cole Neubauer - Fixed documentation. References #4807
   *   @history 2018-07-20 Tyler Wilson - Added support for unsigned integer special pixel values.
   *                            in functions writeIntoRaw(...) and writeIntoDouble(...)
   *                            References #971.
   */
  class CubeIoHandler {
    public:
+2 −2
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ namespace Isis {
   *                           IVALID_MAX4 definition to handle SignedInteger
   *                           imports.
   *   @history 2018-07-18 Tyler Wilson - Added 4-byte unsigned int special pixel values.
   *
   *                           References #971.
   *  @todo 2005-02-15 Kris Becker - finish class documentation
   *
   */
@@ -144,7 +144,7 @@ namespace Isis {
  const int  IVALID_MIN4 = 0xFF7FFFFA;
  const float VALID_MIN4 = (*((const float *) &IVALID_MIN4));

  //const int UINULL4 = 0xFF7FFFFB;

  const int  INULL4 = 0xFF7FFFFB;
  const float NULL4 = (*((const float *) &INULL4));