Exemple #1
0
 protected void encodeRowFromInt(int[] 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 (int x in row)   // optimized
             {
                 rowb[j++] = (byte)x;
             }
         }
         else
         {                          // 16 bitspc
             foreach (int x in row) // optimized
             {
                 rowb[j++] = (byte)(x >> 8);
                 rowb[j++] = (byte)(x);
             }
         }
     }
     else
     {
         // perhaps we need to pack?
         if (row.Length >= ImgInfo.SamplesPerRow && needsPack)
         {
             ImageLine.packInplaceInt(ImgInfo, row, row, false);      // row is packed in place!
         }
         int samplesPerRowPacked = ImgInfo.SamplesPerRowPacked;
         if (ImgInfo.BitDepth <= 8)
         {
             for (int i = 0, j = 1; i < samplesPerRowPacked; i++)
             {
                 rowb[j++] = (byte)row[i];
             }
         }
         else
         {
             // 16 bitspc
             for (int i = 0, j = 1; i < samplesPerRowPacked; i++)
             {
                 rowb[j++] = (byte)(row[i] >> 8);
                 rowb[j++] = (byte)(row[i]);
             }
         }
     }
 }
Exemple #2
0
        public static int[] Pack(ImageInfo imgInfo, int[] src, int[] dst, bool scale)
        {
            int len0 = imgInfo.SamplesPerRowPacked;

            if (dst == null || dst.Length < len0)
            {
                dst = new int[len0];
            }
            if (imgInfo.Packed)
            {
                ImageLine.packInplaceInt(imgInfo, src, dst, scale);
            }
            else
            {
                Array.Copy(src, 0, dst, 0, len0);
            }
            return(dst);
        }