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;
}