首页 > 解决方案 > 基于解码 RLE(按位)函数对编码函数进行编程

问题描述

目前我只有解码过程,EncodedRle是带有编码图像字节的字节数组,pixel是在解码图像上绘制的像素位置,col是解码像素颜色,0 或 255,matSpan是图像像素跨度(字节数组)

解码功能:

            int pixel = 0;
            foreach (var run in EncodedRle)
            {
                byte col = (byte) ((run & 0x01) * 255);

                var numPixelsInRun =
                    (((run & 128) > 0 ? 1 : 0) |
                     ((run & 64) > 0 ? 2 : 0) |
                     ((run & 32) > 0 ? 4 : 0) |
                     ((run & 16) > 0 ? 8 : 0) |
                     ((run &  8) > 0 ? 16 : 0) |
                     ((run &  4) > 0 ? 32 : 0) |
                     ((run &  2) > 0 ? 64 : 0)) + 1;
                
                for (; numPixelsInRun > 0; numPixelsInRun--)
                {
                    matSpan[pixel++] = col;
                }
            }

如何编写编码函数?我知道我需要限制步幅,因此将同一行中的相等像素相加发现一个不同的值并限制为每字节最大 128?但我不擅长按位,找不到正确的方法。和提示?

标签: bit-manipulationbitwise-operators

解决方案


推荐阅读