示例#1
0
 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;
             }
         }
     }
 }
示例#2
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);
        }