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); }
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); }
/*----------------------------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------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()); }