The given tiles are horizontally adjacent.
197 {
200
201 const auto firstTile = static_cast<size_t>(firstTile_);
202 const auto scanLineSize =
static_cast<std::streamsize
>((
m_bmd.
rect.
width() * spp * bps + 7) / 8);
203 const auto tileStride = static_cast<size_t>(tileWidth * spp * bps / 8);
204 std::vector<char> row(scanLineSize);
205
206 const size_t tileCount = tiles.size();
207 auto dataPtr = std::vector<byte*>(tileCount);
208 for(size_t tile = 0; tile < tileCount; tile++)
209 {
210 dataPtr[tile] = tiles[tile]->data.get();
211 }
212
213 for(size_t i = 0; i < static_cast<size_t>(lineCount); i++)
214 {
215 m_pnm.read(row.data(), scanLineSize);
216
217 for(size_t tile = 0; tile < tileCount - 1; tile++)
218 {
219 memcpy(dataPtr[tile], row.data() + (firstTile + tile) * tileStride, tileStride);
220 dataPtr[tile] += tileStride;
221 }
222 memcpy(
223 dataPtr[tileCount - 1],
224 row.data() + (firstTile + tileCount - 1) * tileStride,
225 scanLineSize - (firstTile + tileCount - 1) * tileStride
226 );
227 dataPtr[tileCount - 1] += tileStride;
228 }
229 }
std::ifstream m_pnm
Definition pnmsource.hh:41
BitmapMetaData m_bmd
Definition pnmsource.hh:42
value_type width() const
Definition rectangle.hh:129