bool DICOMFileFrameRegionReader::incSourceFrameReadCounter()

in src/dicom_file_region_reader.cpp [180:219]


bool DICOMFileFrameRegionReader::incSourceFrameReadCounter(int64_t layerX,
int64_t layerY, int64_t memWidth, int64_t memHeight) {
  // Reads a sub region from the a set of dicom frames spread across file(s).
  //
  // Memory pixels in ARGB format.
  // Memory pixel value = 0x00000000 for positions outside image dim.
  //
  // Args:
  //   layerX : upper left X coordinate in image coordinates.
  //   layerY : upper left Y coordinate in image coordinates.
  //   memWidth : Width of memory to copy into.
  //   memHeight : Height of memory to copy into.
  //   memory : Memory to copy into .
  //
  // Returns: True if has files, false if no DICOM files set.
  if (dicomFileCount() <= 0) {
    return false;
  }
  // compute first and last frames to read.
  int64_t firstFrameX, firstFrameY, lastFrameX, lastFrameY;
  xyFrameSpan(layerX, layerY, memWidth, memHeight, &firstFrameX,
              &firstFrameY, &lastFrameX, &lastFrameY);

  int64_t frameYCOffset = firstFrameY * framesPerRow_;
  // increment over frame rows
  for (int64_t frameYC = firstFrameY; frameYC <= lastFrameY; ++frameYC) {
    // iterate over frame columns.
    for (int64_t frameXC = firstFrameX; frameXC <= lastFrameX; ++frameXC) {
      if ((frameXC < framesPerRow_) && (frameYC < framesPerColumn_)) {
        Frame* fptr = framePtr(frameXC + frameYCOffset);
        if (fptr != nullptr) {
          fptr->incReadCounter();
        }
      }
    }
    // increment row offset into frame buffer memory.
    frameYCOffset += framesPerRow_;
  }
  return true;
}