private void decodeLastReadRowToByte(byte[] buffer, int bytesRead) // see http://www.libpng.org/pub/png/spec/1.2/PNG-DataRep.html { if (ImgInfo.BitDepth <= 8) { Array.Copy(rowb, 1, buffer, 0, bytesRead); } else // 16 bitspc { for (int i = 0, j = 1; j < bytesRead; i++, j += 2) { buffer[i] = rowb[j]; // 16 bits in 1 byte: this discards the LSB!!! } } if (ImgInfo.Packed && unpackedMode) { ImageLine.unpackInplaceByte(ImgInfo, buffer, buffer, false); } }
public static byte[] Unpack(ImageInfo imgInfo, byte[] src, byte[] dst, bool scale) { int len1 = imgInfo.SamplesPerRow; int len0 = imgInfo.SamplesPerRowPacked; if (dst == null || dst.Length < len1) { dst = new byte[len1]; } if (imgInfo.Packed) { ImageLine.unpackInplaceByte(imgInfo, src, dst, scale); } else { Array.Copy(src, 0, dst, 0, len0); } return(dst); }
public void decodeLastReadRowToByte(byte[] buffer, int bytesRead) { if (ImgInfo.BitDepth <= 8) { Array.Copy(rowb, 1, buffer, 0, bytesRead); } else { int num = 0; for (int i = 1; i < bytesRead; i += 2) { buffer[num] = rowb[i]; num++; } } if (ImgInfo.Packed && unpackedMode) { ImageLine.unpackInplaceByte(ImgInfo, buffer, buffer, scale: false); } }