public WindowAppearance(Color16 backColor, Color16 borderColor, Color16 titleTextColor, bool thinBorder = false)
 {
     BackColor      = backColor;
     BorderColor    = borderColor;
     TitleTextColor = titleTextColor;
     ThinBorder     = thinBorder;
 }
Ejemplo n.º 2
0
        public TextCell(char character, Color16 foreColor, Color16 backColor)
        {
            Character = Verify.VisibleAscii(character, nameof(character));

            ForeColor = foreColor;
            BackColor = backColor;
        }
Ejemplo n.º 3
0
        private Color16 Merge(Color16 reference, Color16 lower, Color16 higher)
        {
            Color16 result = reference;

            if (reference.A != lower.A || reference.A != higher.A)
            {
                return(result);
            }

            bool doMerge;

            if (Config.Resample.Deposterization.UsePerceptualColor && lower != higher && (lower == reference || higher == reference))
            {
                doMerge =
                    (lower == reference && ColorDifference(higher, reference) <= Threshold) ||
                    (higher == reference && ColorDifference(lower, reference) <= Threshold);
            }
            else
            {
                doMerge =
                    reference.A == lower.A && reference.A == higher.A &&
                    Compare(reference.R, lower.R, higher.R) &&
                    Compare(reference.G, lower.G, higher.G) &&
                    Compare(reference.B, lower.B, higher.B);
            }

            if (doMerge)
            {
                result.R = (ushort)((lower.R.Value + higher.R.Value) >> 1);
                result.G = (ushort)((lower.G.Value + higher.G.Value) >> 1);
                result.B = (ushort)((lower.B.Value + higher.B.Value) >> 1);
            }

            return(result);
        }
Ejemplo n.º 4
0
 internal static uint ColorDistance(
     bool useRedmean,
     bool gammaCorrected,
     bool hasAlpha,
     Color16 pix1,
     Color16 pix2,
     in YccConfig yccConfig
Ejemplo n.º 5
0
        //====== ctors

        public BigDigitsScoreUI(IScoreStatus scoreStatus, Color16 foreColor = Color16.Teal)
        {
            this.scoreStatus = Verify.NotNull(scoreStatus, nameof(scoreStatus));

            ForeColor = foreColor;

            lastScore = scoreStatus.Value;
        }
Ejemplo n.º 6
0
        public void WriteTextCenter(int y, string message, Color16 foreColor, Color16 backColor)
        {
            int maxLineLength = message.Split(new string[] { "\r\n" }, StringSplitOptions.None).Max(x => x.Length);

            var position = new Point((Size.Width / 2) - (maxLineLength / 2), y);

            WriteText(position, message, foreColor, backColor);
        }
Ejemplo n.º 7
0
 internal Color16 Delinearize(Color16 color)
 {
     return(new(
                Delinearize(color.R),
                Delinearize(color.G),
                Delinearize(color.B),
                color.A
                ));
 }
Ejemplo n.º 8
0
 internal Color16 Linearize(Color16 color)
 {
     return(new(
                Linearize(color.R),
                Linearize(color.G),
                Linearize(color.B),
                color.A
                ));
 }
Ejemplo n.º 9
0
        public void WriteText(Point position, string message, Color16 foreColor, Color16 backColor)
        {
            string[] lines = message.Split(new string[] { "\r\n" }, StringSplitOptions.None);

            for (int i = 0; i < lines.Length; i++)
            {
                WriteLine(position.AddToY(i), lines[i], foreColor, backColor);
            }
        }
Ejemplo n.º 10
0
 internal uint ColorDistance(Color16 pix1, Color16 pix2)
 {
     return(Resample.Scalers.Common.ColorDistance(
                useRedmean: Configuration.UseRedmean,
                gammaCorrected: Configuration.GammaCorrected,
                hasAlpha: Configuration.HasAlpha,
                pix1: pix1,
                pix2: pix2,
                yccConfig: YccConfiguration
                ));
 }
Ejemplo n.º 11
0
 internal Kernel3X3(Color16 _0, Color16 _1, Color16 _2, Color16 _3, Color16 _4, Color16 _5, Color16 _6, Color16 _7, Color16 _8)
 {
     Data[0] = _0.AsPacked;
     Data[1] = _1.AsPacked;
     Data[2] = _2.AsPacked;
     Data[3] = _3.AsPacked;
     Data[4] = _4.AsPacked;
     Data[5] = _5.AsPacked;
     Data[6] = _6.AsPacked;
     Data[7] = _7.AsPacked;
     Data[8] = _8.AsPacked;
 }
    protected void AlphaBlend(int n, int m, ref Color16 dstRef, Color16 color)
    {
        //assert n < 256 : "possible overflow of (color & redMask) * N";
        //assert m < 256 : "possible overflow of (color & redMask) * N + (dst & redMask) * (M - N)";
        //assert 0 < n && n < m : "0 < N && N < M";

        //this works because 8 upper bits are free
        var dst = dstRef;
        var a   = BlendComponent(n, m, dst.A, color.A);
        var r   = BlendComponent(n, m, dst.R, color.R);
        var g   = BlendComponent(n, m, dst.G, color.G);
        var b   = BlendComponent(n, m, dst.B, color.B);

        dstRef = new(r, g, b, a);
    }
Ejemplo n.º 13
0
 private uint ColorDifference(Color16 pix1, Color16 pix2)
 {
     if (UseRedmean)
     {
         return(pix1.RedmeanDifference(pix2,
                                       linear: true,
                                       alpha: true
                                       ));
     }
     else
     {
         return(pix1.YccDifference(pix2,
                                   config: YccConfiguration,
                                   linear: true,
                                   alpha: true
                                   ));
     }
 }
Ejemplo n.º 14
0
        private void WriteLine(Point position, string message, Color16 foreColor, Color16 backColor)
        {
            if (Size.AsRectangle.Contains(position.JustY) == false)
            {
                return;
            }

            for (int i = 0; i < message.Length; i++) // TODO: can be optimized, no need to draw not visible characters
            {
                Point letterPosition = position.AddToX(i);

                if (letterPosition.X >= Size.Width)
                {
                    return;
                }

                Write(letterPosition, new TextCell(message[i], foreColor, backColor));
            }
        }
Ejemplo n.º 15
0
    internal static int SubMain(Options options, List <Argument> args)
    {
        var previewFile = options.Paths.FirstOrDefault();

        if (previewFile is not null)
        {
            var fileData = Common.ReadFile(new Uri(previewFile), out var fileSize);

            SpriteData = Color16.Convert(fileData).ToArray();
            // It doesn't appear as though the file data is premultiplied!
            SpriteMaster.Resample.Passes.PremultipliedAlpha.Apply(SpriteData, fileSize);

            SpriteSize = fileSize;
        }

        Application.EnableVisualStyles();
        Application.Run(new PreviewWindow());
        return(0);
    }
Ejemplo n.º 16
0
        public void Frame(Rectangle area, Color16 foreColor, Color16 backColor, bool thin = false)
        {
            if (Size.AsRectangle.Intersect(area).Size.HasNoArea)
            {
                return;
            }

            TextCanvas?view = Slice(area);

            if (view.Size.Width < 2 || view.Size.Height < 2)
            {
                return;
            }

            var hLineCell = new TextCell(thin ? '─' : '═', foreColor, backColor);
            var vLineCell = new TextCell(thin ? '│' : '║', foreColor, backColor);

            var rect = view.Size.AsRectangle;

            if (rect.Size.Width > 2)
            {
                view.HLine(rect.TopLeft, rect.Size.Width, hLineCell);
                view.HLine(rect.BottomLeft, rect.Size.Width, hLineCell);
            }

            if (rect.Size.Height > 2)
            {
                view.VLine(rect.TopLeft, rect.Size.Height, vLineCell);
                view.VLine(rect.TopRight, rect.Size.Height, vLineCell);
            }

            view.Write(rect.TopLeft, new TextCell(thin ? '┌' : '╔', foreColor, backColor));
            view.Write(rect.TopRight, new TextCell(thin ? '┐' : '╗', foreColor, backColor));
            view.Write(rect.BottomLeft, new TextCell(thin ? '└' : '╚', foreColor, backColor));
            view.Write(rect.BottomRight, new TextCell(thin ? '┘' : '╝', foreColor, backColor));
        }
Ejemplo n.º 17
0
 internal Kernel4X4(
     Color16 _0,
     Color16 _1,
     Color16 _2,
     Color16 _3,
     Color16 _4,
     Color16 _5,
     Color16 _6,
     Color16 _7,
     Color16 _8,
     Color16 _9,
     Color16 _10,
     Color16 _11,
     Color16 _12,
     Color16 _13,
     Color16 _14,
     Color16 _15
     ) : this()
 {
     Data[0]  = _0;
     Data[1]  = _1;
     Data[2]  = _2;
     Data[3]  = _3;
     Data[4]  = _4;
     Data[5]  = _5;
     Data[6]  = _6;
     Data[7]  = _7;
     Data[8]  = _8;
     Data[9]  = _9;
     Data[10] = _10;
     Data[11] = _11;
     Data[12] = _12;
     Data[13] = _13;
     Data[14] = _14;
     Data[15] = _15;
 }
Ejemplo n.º 18
0
 internal Kernel4X4(
     Color16 _0,
     Color16 _1,
     Color16 _2,
     Color16 _3,
     Color16 _4,
     Color16 _5,
     Color16 _6,
     Color16 _7,
     Color16 _8,
     Color16 _9,
     Color16 _10,
     Color16 _11,
     Color16 _12,
     Color16 _13,
     Color16 _14,
     Color16 _15
     )
 {
     Data[0]  = _0.AsPacked;
     Data[1]  = _1.AsPacked;
     Data[2]  = _2.AsPacked;
     Data[3]  = _3.AsPacked;
     Data[4]  = _4.AsPacked;
     Data[5]  = _5.AsPacked;
     Data[6]  = _6.AsPacked;
     Data[7]  = _7.AsPacked;
     Data[8]  = _8.AsPacked;
     Data[9]  = _9.AsPacked;
     Data[10] = _10.AsPacked;
     Data[11] = _11.AsPacked;
     Data[12] = _12.AsPacked;
     Data[13] = _13.AsPacked;
     Data[14] = _14.AsPacked;
     Data[15] = _15.AsPacked;
 }
 internal abstract void BlendLineDiagonal(Color16 color, ref OutputMatrix matrix);
Ejemplo n.º 20
0
 public Drawable(char symbol, Color16 color)
 {
     Symbol = symbol;
     Color  = new ColorValue(color);
 }
Ejemplo n.º 21
0
 public void ClearColor(Color16 backColor = Color16.Black) => Fill(new TextCell(' ', backColor, backColor));
Ejemplo n.º 22
0
        //====== private methods

        private void WriteStatsLine(TextCanvas canvas, Point position, string key, string value, Color16 foreColor)
        {
            canvas.WriteText(position, key + ":", Color16.White, Appearance.BackColor);
            canvas.WriteText(position.AddToX(key.Length + 2), value, foreColor, Appearance.BackColor);
        }
 internal abstract void BlendLineShallow(Color16 color, ref OutputMatrix matrix);
Ejemplo n.º 24
0
 internal bool IsColorEqual(Color16 color1, Color16 color2) => ColorDistance(color1, color2) < Configuration.EqualColorTolerance;
        public BigDigitsValueRenderer(int value, Color16 foreColor)
        {
            Value = Verify.InRange(value, 0, int.MaxValue, nameof(value));

            ForeColor = foreColor;
        }
 internal abstract void BlendCorner(Color16 color, ref OutputMatrix matrix);