Chỉ cần sử dụng Console.SetCursorPosition
để di chuyển con trỏ đến một vị trí nhất định, sau đó Console.Write
một ký tự. Trước mỗi khung hình, bạn phải xóa khung trước bằng cách ghi đè lên nó bằng dấu cách. Heres một ví dụ nhỏ tôi chỉ xây dựng:
class Program
{
static void Main(string[] args)
{
char[] chars = new char[] { '.', '-', '+', '^', '°', '*' };
for (int i = 0; ; i++)
{
if (i != 0)
{
// Delete the previous char by setting it to a space
Console.SetCursorPosition(6 - (i-1) % 6 - 1, Console.CursorTop);
Console.Write(" ");
}
// Write the new char
Console.SetCursorPosition(6 - i % 6 - 1, Console.CursorTop);
Console.Write(chars[i % 6]);
System.Threading.Thread.Sleep(100);
}
}
}
Bạn có thể ví dụ có một gif động, trích xuất tất cả các khung đơn/hình ảnh từ nó (xem làm thế nào để làm điều đó here), áp dụng một chuyển đổi ASCII (làm thế nào để làm điều đó được mô tả là here chẳng hạn) và in các khung này theo khung như trong ví dụ mã trên.
Cập nhật
Just for fun, tôi thực hiện những gì tôi vừa mô tả. Chỉ cần thử thay thế @"C:\some_animated_gif.gif"
bằng đường dẫn đến một số gif động (không lớn). Ví dụ: lấy một bộ nạp AJAX gif từ here.
class Program
{
static void Main(string[] args)
{
Image image = Image.FromFile(@"C:\some_animated_gif.gif");
FrameDimension dimension = new FrameDimension(
image.FrameDimensionsList[0]);
int frameCount = image.GetFrameCount(dimension);
StringBuilder sb;
// Remember cursor position
int left = Console.WindowLeft, top = Console.WindowTop;
char[] chars = { '#', '#', '@', '%', '=', '+',
'*', ':', '-', '.', ' ' };
for (int i = 0; ; i = (i + 1) % frameCount)
{
sb = new StringBuilder();
image.SelectActiveFrame(dimension, i);
for (int h = 0; h < image.Height; h++)
{
for (int w = 0; w < image.Width; w++)
{
Color cl = ((Bitmap)image).GetPixel(w, h);
int gray = (cl.R + cl.G + cl.B)/3;
int index = (gray * (chars.Length - 1))/255;
sb.Append(chars[index]);
}
sb.Append('\n');
}
Console.SetCursorPosition(left, top);
Console.Write(sb.ToString());
System.Threading.Thread.Sleep(100);
}
}
}
Nguồn
2010-04-27 22:20:39
Chỉ cần cập nhật câu trả lời của tôi. Hãy vui vẻ :) –
Hmm, đó là định nghĩa của nhấp nháy, không phải là một "pixel" duy nhất là giống nhau từ một khung hình để tiếp theo. Di chuyển nhanh. –