The given tiles are horizontally adjacent.
267 {
270
271 const auto startLine_ = static_cast<uint32_t>(startLine);
272 const auto firstTile_ = static_cast<size_t>(firstTile);
273 const auto scanLineSize =
static_cast<size_t>(TIFFScanlineSize(
tif.get()));
274 const auto tileStride = static_cast<size_t>(tileWidth * spp * bps / 8);
275 std::vector<byte> row(scanLineSize);
276
277 const size_t tileCount = tiles.size();
278 auto dataPtr = std::vector<byte*>(tileCount);
279 for(size_t tile = 0; tile < tileCount; tile++)
280 {
281 dataPtr[tile] = tiles[tile]->data.get();
282 }
283
284 for(size_t i = 0; i < static_cast<size_t>(lineCount); i++)
285 {
286 TIFFReadScanline(
tif.get(), row.data(),
static_cast<uint32_t
>(i) + startLine_);
287
288 for(size_t tile = 0; tile < tileCount - 1; tile++)
289 {
290 memcpy(dataPtr[tile], row.data() + (firstTile_ + tile) * tileStride, tileStride);
291 dataPtr[tile] += tileStride;
292 }
293 memcpy(
294 dataPtr[tileCount - 1],
295 row.data() + (firstTile_ + tileCount - 1) * tileStride,
296 scanLineSize - (firstTile_ + tileCount - 1) * tileStride
297 );
298 dataPtr[tileCount - 1] += tileStride;
299 }
300 }