Exemplo n.º 1
0
        private static Bc2Block TryColors(RawBlock4X4Rgba32 rawBlock, ColorRgb565 color0, ColorRgb565 color1, out float error, float rWeight = 0.3f, float gWeight = 0.6f, float bWeight = 0.1f)
        {
            Bc2Block output = new Bc2Block();

            var pixels = rawBlock.AsSpan;

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

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

            ReadOnlySpan <ColorRgb24> colors = stackalloc ColorRgb24[] {
                c0,
                c1,
                c0 *(2.0 / 3.0) + c1 * (1.0 / 3.0),
                c0 *(1.0 / 3.0) + c1 * (2.0 / 3.0)
            };

            error = 0;
            for (int i = 0; i < 16; i++)
            {
                var color = pixels[i];
                output.SetAlpha(i, color.A);
                output[i] = ColorChooser.ChooseClosestColor4(colors, color, rWeight, gWeight, bWeight, out var e);
                error    += e;
            }

            return(output);
        }
Exemplo n.º 2
0
        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[] {