示例#1
0
        public void Decode()
        {
            Bc1Block block = new Bc1Block();

            block.color0 = new ColorRgb565(255, 255, 255);
            block.color1 = new ColorRgb565(0, 0, 0);

            Assert.False(block.HasAlphaOrBlack);
            block[0] = 1;
            block[1] = 1;
            block[2] = 1;
            block[3] = 1;

            block[4] = 3;
            block[5] = 3;
            block[6] = 3;
            block[7] = 3;

            block[8]  = 2;
            block[9]  = 2;
            block[10] = 2;
            block[11] = 2;

            block[12] = 0;
            block[13] = 0;
            block[14] = 0;
            block[15] = 0;

            var raw = block.Decode(false);

            Assert.Equal(Rgba32.Black, raw.p00);
            Assert.Equal(Rgba32.Black, raw.p10);
            Assert.Equal(Rgba32.Black, raw.p20);
            Assert.Equal(Rgba32.Black, raw.p30);

            Assert.Equal(new Rgba32(85, 85, 85), raw.p01);
            Assert.Equal(new Rgba32(85, 85, 85), raw.p11);
            Assert.Equal(new Rgba32(85, 85, 85), raw.p21);
            Assert.Equal(new Rgba32(85, 85, 85), raw.p31);

            Assert.Equal(new Rgba32(170, 170, 170), raw.p02);
            Assert.Equal(new Rgba32(170, 170, 170), raw.p12);
            Assert.Equal(new Rgba32(170, 170, 170), raw.p22);
            Assert.Equal(new Rgba32(170, 170, 170), raw.p32);

            Assert.Equal(Rgba32.White, raw.p03);
            Assert.Equal(Rgba32.White, raw.p13);
            Assert.Equal(Rgba32.White, raw.p23);
            Assert.Equal(Rgba32.White, raw.p33);
        }
示例#2
0
        public void DecodeAlpha()
        {
            Bc1Block block = new Bc1Block();

            block.color0 = new ColorRgb565(200, 200, 200);
            block.color1 = new ColorRgb565(255, 255, 255);

            Assert.True(block.HasAlphaOrBlack);
            block[0] = 0;
            block[1] = 0;
            block[2] = 0;
            block[3] = 0;

            block[4] = 3;
            block[5] = 3;
            block[6] = 3;
            block[7] = 3;

            block[8]  = 2;
            block[9]  = 2;
            block[10] = 2;
            block[11] = 2;

            block[12] = 1;
            block[13] = 1;
            block[14] = 1;
            block[15] = 1;

            var raw = block.Decode(true);

            Assert.Equal(new Rgba32(206, 203, 206), raw.p00);
            Assert.Equal(new Rgba32(206, 203, 206), raw.p10);
            Assert.Equal(new Rgba32(206, 203, 206), raw.p20);
            Assert.Equal(new Rgba32(206, 203, 206), raw.p30);

            Assert.Equal(new Rgba32(0, 0, 0, 0), raw.p01);
            Assert.Equal(new Rgba32(0, 0, 0, 0), raw.p11);
            Assert.Equal(new Rgba32(0, 0, 0, 0), raw.p21);
            Assert.Equal(new Rgba32(0, 0, 0, 0), raw.p31);

            Assert.Equal(new Rgba32(230, 228, 230), raw.p02);
            Assert.Equal(new Rgba32(230, 228, 230), raw.p12);
            Assert.Equal(new Rgba32(230, 228, 230), raw.p22);
            Assert.Equal(new Rgba32(230, 228, 230), raw.p32);

            Assert.Equal(Rgba32.White, raw.p03);
            Assert.Equal(Rgba32.White, raw.p13);
            Assert.Equal(Rgba32.White, raw.p23);
            Assert.Equal(Rgba32.White, raw.p33);
        }
        private static Bc1Block TryColors(RawBlock4X4Rgba32 rawBlock, ColorRgb565 color0, ColorRgb565 color1, out float error, float rWeight = 0.3f, float gWeight = 0.6f, float bWeight = 0.1f)
        {
            Bc1Block output = new Bc1Block();

            var pixels = rawBlock.AsSpan;

            output.color0 = color0;
            output.color1 = color1;

            var c0 = color0.ToColorRgb24();
            var c1 = color1.ToColorRgb24();

            ReadOnlySpan <ColorRgb24> colors = output.HasAlphaOrBlack ?
                                               stackalloc ColorRgb24[] {
                c0,
                c1,
                c0 *(1.0 / 2.0) + c1 * (1.0 / 2.0),
                new ColorRgb24(0, 0, 0)
            } : stackalloc ColorRgb24[] {