示例#1
0
 public CF.CONSOLE_SCREEN_BUFFER_INFO_EX GetInfo()
 {
     CF.CONSOLE_SCREEN_BUFFER_INFO_EX buf = new CF.CONSOLE_SCREEN_BUFFER_INFO_EX();
     buf.cbSize = (uint)Marshal.SizeOf(buf);
     CF.GetConsoleScreenBufferInfoEx(Handle, ref buf);
     return(buf);
 }
示例#2
0
        public void VT_FillScreen(string pattern, Color?Fore = null, Color?Back = null)
        {
            CF.CONSOLE_SCREEN_BUFFER_INFO_EX inf = GetInfo();
            int           dwSize = inf.dwSize.X * inf.dwSize.Y;
            StringBuilder b      = new StringBuilder(dwSize);

            for (int i = 0; i < dwSize; i += pattern.Length)
            {
                b.Append(pattern);
            }

            VT_MoveCursor(0, 0);
            VT_Write(b.ToString().Substring(0, dwSize), Fore, Back);
            VT_MoveCursor(inf.dwCursorPosition.X, inf.dwCursorPosition.Y);
        }
示例#3
0
        /*----------------------------------------------------------------------------------------------------------------------*/
        /*----------------------------------------------------------------------------------------------------------------------*/
        /*----------------------------------------------------Y U DO DIS!!?-----------------------------------------------------*/
        /*----------------------------------------------------------------------------------------------------------------------*/
        public void VT_Image_Raster_Image(Bitmap b)
        {
            CF.CONSOLE_SCREEN_BUFFER_INFO_EX inf = GetInfo();
            int width = inf.dwSize.X + 1, height = inf.dwSize.Y + 1;

            Color[,] grid = new Color[width, height]; //Destination Bitmap
            double alpha = 0.4;

            //For each pixel in the source bitmap, work out which destination pixel it fits into. Then: Either Take an average, or set its value
            for (int charX = 0; charX < b.Width; charX++)
            {
                for (int charY = 0; charY < b.Height; charY++)
                {
                    int destX = Math.Min(Convert.ToInt32(charX * ((double)width / b.Width)), width - 1);
                    int destY = Math.Min(Convert.ToInt32(charY * ((double)height / b.Height)), height - 1);

                    if (grid[destX, destY].IsEmpty)
                    {
                        grid[destX, destY] = b.GetPixel(charX, charY);
                    }
                    else
                    {   //Do a running average etc.Or better yet base alpha on distance to actual value
                        grid[destX, destY] = Color.FromArgb(255, Convert.ToInt32((grid[destX, destY].R * alpha) + (b.GetPixel(charX, charY).R *(1 - alpha))),
                                                            Convert.ToInt32((grid[destX, destY].G * alpha) + (b.GetPixel(charX, charY).G *(1 - alpha))),
                                                            Convert.ToInt32((grid[destX, destY].B * alpha) + (b.GetPixel(charX, charY).B *(1 - alpha))));
                    }
                }
            }

            StringBuilder d = new StringBuilder((grid.Length * 16) + (height * 7));

            for (int y = 0; y < height; y++)
            {
                d.Append(CSI + y + ";" + 0 + "H");
                for (int x = 0; x < width; x++)
                {
                    d.Append(CSI + ";48;2;" + grid[x, y].R + ";" + grid[x, y].G + ";" + grid[x, y].B + "m ");
                }
            }
            Write(d.ToString());
        }