Ejemplo n.º 1
0
        public static void SplitRgb5A3(
            ushort color,
            out byte r,
            out byte g,
            out byte b,
            out byte a)
        {
            var alphaFlag = BitLogic.ExtractFromRight(color, 15, 1);

            if (alphaFlag == 1)
            {
                a = 255;
                r = ColorUtil.ExtractScaled(color, 10, 5);
                g = ColorUtil.ExtractScaled(color, 5, 5);
                b = ColorUtil.ExtractScaled(color, 0, 5);
            }
            else
            {
                a = ColorUtil.ExtractScaled(color, 12, 3);

                r = ColorUtil.ExtractScaled(color, 8, 4, 17);
                g = ColorUtil.ExtractScaled(color, 4, 4, 17);
                b = ColorUtil.ExtractScaled(color, 0, 4, 17);
            }
        }
Ejemplo n.º 2
0
        public static byte ExtractScaled(
            ushort col,
            int offset,
            int count,
            double factor)
        {
            var extracted = BitLogic.ExtractFromRight(col, offset, count) * 1d;

            return((byte)Math.Round(extracted * factor));
        }
Ejemplo n.º 3
0
        protected override IColor[] DecodeBlock(IList <byte> block, int position)
        {
            var bl = new IColor[4 * 4];
            var s  = new VectorReader(block, position, Endianness.Big);

            for (var j = 0; j < 4; ++j)
            {
                for (var i = 0; i < 4; ++i)
                {
                    var pix = s.ReadU16();

                    var alphaFlag = BitLogic.ExtractFromRight(pix, 15, 1);

                    byte r, g, b, a;
                    if (alphaFlag == 1)
                    {
                        a = 255;
                        r = ColorUtil.ExtractScaled(pix, 10, 5);
                        g = ColorUtil.ExtractScaled(pix, 5, 5);
                        b = ColorUtil.ExtractScaled(pix, 0, 5);
                    }
                    else
                    {
                        a = ColorUtil.ExtractScaled(pix, 12, 3);

                        r = ColorUtil.ExtractScaled(pix, 8, 4, 17);
                        g = ColorUtil.ExtractScaled(pix, 4, 4, 17);
                        b = ColorUtil.ExtractScaled(pix, 0, 4, 17);
                    }

                    bl[j * 4 + i] = ColorImpl.FromRgbaBytes(r, g, b, a);
                }
            }

            return(bl);
        }