Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 4 1 3
Привет,у меня есть проблемка я делаю ASCII видео плеер у меня картинка наслаивается в чём проблема c Аноним 08/09/25 Пнд 11:00:38 3536351 1
Снимок экрана 2[...].png 150Кб, 983x631
983x631
Привет,у меня есть проблемка я делаю ASCII видео плеер у меня картинка наслаивается в чём проблема c# (.net 6).Вот код:
using FFMediaToolkit.Decoding;
using SkiaSharp;
using System.Text;

class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();

string AsciiGradient = "`.-':_,^=;><+!rc/z?sLTv)J7(|Fi{C}fI31tlu[neoZ5Yxjya]2ESwqkP6h9d4VpOGbUAKXHm8RD#$Bg0MNWQ%&@";

var file = MediaFile.Open(@"D:\example\movie.mp4");
using var bitmap = new SKBitmap(file.Video.Info.FrameSize.Width, file.Video.Info.FrameSize.Height, SKColorType.Rgba8888, SKAlphaType.Unpremul);
var pixelBuffer = bitmap.GetPixelSpan();

int consoleWidth = 450;
int consoleHeight = (int)(bitmap.Height
consoleWidth / bitmap.Width / 2.1);

while (file.Video.TryGetNextFrame(pixelBuffer))
{
Console.SetCursorPosition(0, 0);
sb = new StringBuilder();
SKBitmap NewBitmap = bitmap.Resize(new SKImageInfo(consoleWidth, consoleHeight), SKSamplingOptions.Default);

for (int y = 0; y < NewBitmap.Height; y++)
{
for (int x = 0; x < NewBitmap.Width; x++)
{
var color = NewBitmap.GetPixel(x, y);
double g = ((.2126 color.Red) + (.7152 color.Green) + (.0722 color.Blue)) / 255;
int index = (int)(g
(AsciiGradient.Length - 1));
sb.Append(AsciiGradient[index]);
}
sb.Append('\n');
}
Console.WriteLine(sb.ToString());
}
}
}
Аноним 08/09/25 Пнд 11:07:18 3536357 2
Очищай каждый кадр консоль
Аноним 08/09/25 Пнд 11:40:20 3536399 3
Аноним 08/09/25 Пнд 11:58:48 3536421 4
спросил алису

Проблема с наслаиванием картинки в вашем ASCII-плеере связана с тем, что консоль не успевает очистить предыдущий кадр перед выводом нового. Вот исправленный вариант кода:

using FFMediaToolkit.Decoding;
using SkiaSharp;
using System.Text;

class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();
string AsciiGradient = "`.-':_,^=;><+!rc/z?sLTv)J7(|Fi{C}fI31tlu[neoZ5Yxjya]2ESwqkP6h9d4VpOGbUAKXHm8RD#$Bg0MNWQ%&@";

var file = MediaFile.Open(@"D:\example\movie.mp4");
using var bitmap = new SKBitmap(file.Video.Info.FrameSize.Width, file.Video.Info.FrameSize.Height, SKColorType.Rgba8888, SKAlphaType.Unpremul);
var pixelBuffer = bitmap.GetPixelSpan();

int consoleWidth = 450;
int consoleHeight = (int)(bitmap.Height consoleWidth / bitmap.Width / 2.1);

// Очищаем консоль перед воспроизведением
Console.Clear();
Console.CursorVisible = false; // Скрываем курсор

while (file.Video.TryGetNextFrame(pixelBuffer))
{
sb.Clear(); // Очищаем StringBuilder вместо создания нового

SKBitmap NewBitmap = bitmap.Resize(new SKImageInfo(consoleWidth, consoleHeight), SKSamplingOptions.Default);

for (int y = 0; y < NewBitmap.Height; y++)
{
for (int x = 0; x < NewBitmap.Width; x++)
{
var color = NewBitmap.GetPixel(x, y);
double g = ((0.2126
color.Red) + (0.7152 color.Green) + (0.0722 color.Blue)) / 255;
int index = (int)(g (AsciiGradient.Length - 1));
sb.Append(AsciiGradient[index]);
}
sb.Append('\n');
}

Console.SetCursorPosition(0, 0); // Устанавливаем позицию курсора в начало
Console.Write(sb.ToString()); // Используем Write вместо WriteLine
}
}
}

Нейросеть Алиса
Привет,у меня есть проблемка я делаю ASCII видео плеер у меня картинка наслаивается в чём проблема c# (.net 6).Вот код:
using FFMediaToolkit.Decoding;
using SkiaSharp;
using System.Text;

class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();

string AsciiGradient = "`.-':_,^=;><+!rc/z?sLTv)J7(|Fi{C}fI31tlu[neoZ5Yxjya]2ESwqkP6h9d4VpOGbUAKXHm8RD#$Bg0MNWQ%&@";

var file = MediaFile.Open(@"D:\example\movie.mp4");
using var bitmap = new SKBitmap(file.Video.Info.FrameSize.Width, file.Video.Info.FrameSize.Height, SKColorType.Rgba8888, SKAlphaType.Unpremul);
var pixelBuffer = bitmap.GetPixelSpan();

int consoleWidth = 450;
int consoleHeight = (int)(bitmap.Height consoleWidth / bitmap.Width / 2.1);

while (file.Video.TryGetNextFrame(pixelBuffer))
{
Console.SetCursorPosition(0, 0);
sb = new StringBuilder();
SKBitmap NewBitmap = bitmap.Resize(new SKImageInfo(consoleWidth, consoleHeight), SKSamplingOptions.Default);

for (int y = 0; y < NewBitmap.Height; y++)
{
for (int x = 0; x < NewBitmap.Width; x++)
{
var color = NewBitmap.GetPixel(x, y);
double g = ((.2126 color.Red) + (.7152 color.Green) + (.0722 color.Blue)) / 255;
int index = (int)(g (AsciiGradient.Length - 1));
sb.Append(AsciiGradient[index]);
}
sb.Append('\n');
}
Console.WriteLine(sb.ToString());
}
}
}
Проблема с наслаиванием картинки в вашем ASCII-плеере связана с тем, что консоль не успевает очистить предыдущий кадр перед выводом нового. Вот исправленный вариант кода:

using FFMediaToolkit.Decoding;
using SkiaSharp;
using System.Text;

class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();
string AsciiGradient = "`.-':_,^=;><+!rc/z?sLTv)J7(|Fi{C}fI31tlu[neoZ5Yxjya]2ESwqkP6h9d4VpOGbUAKXHm8RD#$Bg0MNWQ%&@";

var file = MediaFile.Open(@"D:\example\movie.mp4");
using var bitmap = new SKBitmap(file.Video.Info.FrameSize.Width, file.Video.Info.FrameSize.Height, SKColorType.Rgba8888, SKAlphaType.Unpremul);
var pixelBuffer = bitmap.GetPixelSpan();

int consoleWidth = 450;
int consoleHeight = (int)(bitmap.Height
consoleWidth / bitmap.Width / 2.1);

// Очищаем консоль перед воспроизведением
Console.Clear();
Console.CursorVisible = false; // Скрываем курсор

while (file.Video.TryGetNextFrame(pixelBuffer))
{
sb.Clear(); // Очищаем StringBuilder вместо создания нового

SKBitmap NewBitmap = bitmap.Resize(new SKImageInfo(consoleWidth, consoleHeight), SKSamplingOptions.Default);

for (int y = 0; y < NewBitmap.Height; y++)
{
for (int x = 0; x < NewBitmap.Width; x++)
{
var color = NewBitmap.GetPixel(x, y);
double g = ((0.2126 color.Red) + (0.7152 color.Green) + (0.0722 color.Blue)) / 255;
int index = (int)(g
(AsciiGradient.Length - 1));
sb.Append(AsciiGradient[index]);
}
sb.Append('\n');
}

Основные изменения:

Добавлена очистка консоли перед воспроизведением

Скрыт курсор консоли для предотвращения артефактов

Используется sb.Clear() вместо создания нового StringBuilder

Заменено Console.WriteLine на Console.Write

Позиция курсора устанавливается в начало перед каждым кадром

Дополнительно рекомендуется:

Добавить обработку ошибок при открытии файла

Добавить проверку на корректность размеров консоли

Добавить задержку между кадрами для контроля FPS

Оптимизировать расчет яркости (можно кэшировать коэффициенты)
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов