Commit 1f59f32c authored by Kristin's avatar Kristin Committed by Jesse Mapel
Browse files

Speed up q-isis applications by decreasing the number of times...

Speed up q-isis applications by decreasing the number of times CubeViewport::paintPixmap() gets a new stretch (#3906)

* Update CubeViewport class to speed up q-isis applications by moving getStretch out of for-loop

* Add time-saving fix to rgb stretches, too, and update docs in header
parent d2bfdb5d
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -1191,6 +1191,10 @@ namespace Isis {

        QRgb *rgb = (QRgb *) p_image->scanLine(y);

        Stretch redStretch = p_red.getStretch();
        Stretch greenStretch = p_green.getStretch();
        Stretch blueStretch = p_blue.getStretch();

        for(int x = dataArea.left(); x <= dataArea.right(); x++) {
          int bufferLeft = p_grayBuffer->bufferXYRect().left();
          int bufferX = x - bufferLeft;
@@ -1211,9 +1215,9 @@ namespace Isis {

          // This is still RGB; the pairs are identical but the boundary
          //   conditions are different. Display saturations cause this.
          int redPix = (int)(p_red.getStretch().Map(bufferVal) + 0.5);
          int greenPix = (int)(p_green.getStretch().Map(bufferVal) + 0.5);
          int bluePix = (int)(p_blue.getStretch().Map(bufferVal) + 0.5);
          int redPix = (int)(redStretch.Map(bufferVal) + 0.5);
          int greenPix = (int)(greenStretch.Map(bufferVal) + 0.5);
          int bluePix = (int)(blueStretch.Map(bufferVal) + 0.5);
          rgb[x] =  qRgb(redPix, greenPix, bluePix);
        }
      }
@@ -1265,10 +1269,14 @@ namespace Isis {

          QRgb *rgb = (QRgb *) p_image->scanLine(y);

          Stretch redStretch = p_red.getStretch();
          Stretch greenStretch = p_green.getStretch();
          Stretch blueStretch = p_blue.getStretch();

          for(int x = dataArea.left(); x <= dataArea.right(); x++) {
            int redPix = (int)(p_red.getStretch().Map(redLine[ x - p_redBuffer->bufferXYRect().left()]) + 0.5);
            int greenPix = (int)(p_green.getStretch().Map(greenLine[ x - p_greenBuffer->bufferXYRect().left()]) + 0.5);
            int bluePix = (int)(p_blue.getStretch().Map(blueLine[ x - p_blueBuffer->bufferXYRect().left()]) + 0.5);
            int redPix = (int)(redStretch.Map(redLine[ x - p_redBuffer->bufferXYRect().left()]) + 0.5);
            int greenPix = (int)(greenStretch.Map(greenLine[ x - p_greenBuffer->bufferXYRect().left()]) + 0.5);
            int bluePix = (int)(blueStretch.Map(blueLine[ x - p_blueBuffer->bufferXYRect().left()]) + 0.5);

            rgb[x] = qRgb(redPix, greenPix, bluePix);
          }
+3 −0
Original line number Diff line number Diff line
@@ -128,6 +128,9 @@ namespace Isis {
   *  @history 2018-07-31 Kaitlyn Lee - Added setTrackingCube() and trackingCube() so that a
   *                          tracking cube is stored when needed and we do not have to open it in
   *                          AdvancedTrackTool every time the cursor is moved.
   *  @history 2020-06-09 Kristin Berry - Updated paintPixmap() to move getStretch out of inner
   *                          for loops. This provides a significant speed increase for qisis
   *                          applications with cube viewports.
   */
  class CubeViewport : public QAbstractScrollArea {
      Q_OBJECT