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; } } }
public static byte[] Pack(ImageInfo imgInfo, byte[] src, byte[] dst, bool scale) { int len0 = imgInfo.SamplesPerRowPacked; if (dst == null || dst.Length < len0) { dst = new byte[len0]; } if (imgInfo.Packed) { ImageLine.packInplaceByte(imgInfo, src, dst, scale); } else { Array.Copy(src, 0, dst, 0, len0); } return(dst); }
public void encodeRowFromByte(byte[] row) { if (row.Length == ImgInfo.SamplesPerRowPacked && !needsPack) { int num = 1; if (ImgInfo.BitDepth <= 8) { foreach (byte b in row) { rowb[num++] = b; } return; } foreach (byte b2 in row) { rowb[num] = b2; num += 2; } return; } if (row.Length >= ImgInfo.SamplesPerRow && needsPack) { ImageLine.packInplaceByte(ImgInfo, row, row, scaled: false); } if (ImgInfo.BitDepth <= 8) { int j = 0; int num2 = 1; for (; j < ImgInfo.SamplesPerRowPacked; j++) { rowb[num2++] = row[j]; } return; } int k = 0; int num3 = 1; for (; k < ImgInfo.SamplesPerRowPacked; k++) { rowb[num3++] = row[k]; rowb[num3++] = 0; } }