protected void encodeRowFromByte(byte[] row)
{
if (row.Length == ImgInfo.SamplesPerRowPacked && !needsPack) {
// some duplication of code - because this case is typical and it works faster this way
int j = 1;
if (ImgInfo.BitDepth <= 8) {
foreach (byte x in row) { // optimized
rowb[j++] = x;
}
} else { // 16 bitspc
foreach (byte x in row) { // optimized
rowb[j] = x;
j += 2;
}
}
} else {
// perhaps we need to pack?
if (row.Length >= ImgInfo.SamplesPerRow && needsPack)
ImageLine.packInplaceByte(ImgInfo, row, row, false); // row is packed in place!
if (ImgInfo.BitDepth <= 8) {
for (int i = 0, j = 1; i < ImgInfo.SamplesPerRowPacked; i++) {
rowb[j++] = row[i];
}
} else { // 16 bitspc
for (int i = 0, j = 1; i < ImgInfo.SamplesPerRowPacked; i++) {
rowb[j++] = row[i];
rowb[j++] = 0;
}
}
}
}