Тяпничная текстовая картинка

mayton
Дата: 27.03.2015 13:18:49
Здарова челы!

Мои читуны тяпничных загадок. Хакатон-щики.
Фанаты сей. Рыцари крестов и Асма.
И прочие geeks.

Сегодня - особый тикет.

Дано - текстовая консоль. Какая? А вот такая. Как в линуксе. Или как cmd в Винде.
Дан - графический файлик. Маленький. Надо отобразить этот графический
файлик цветом в текстовой консоли. Максимально правдоподобно.

Пример:

Картинка с другого сайта.

P.S. Hardcore & Hardcode приветствуется! Mua-haha!

P.P.S. #include <ncurses.h> вам в помощь!

Go! Go!
m_Sla
Дата: 27.03.2015 14:18:52
Делаем ресайз bmp из исходного разрешения в 80*25. Потом выводим.
mayton
Дата: 27.03.2015 14:35:37
m_Sla
Потом выводим.

А с цветами что делать?
Dima T
Дата: 27.03.2015 14:54:12
mayton
А с цветами что делать?

До 16 уменьшить. Или сколько там консоль умеет показывать.
mayton
Дата: 27.03.2015 15:07:53
Библиотека ncurses различает 8 цветовых констант. Но что-то мне подсказывает что
можно сымитировать больше.
Dima T
Дата: 27.03.2015 15:24:25
mayton
Библиотека ncurses различает 8 цветовых констант. Но что-то мне подсказывает что
можно сымитировать больше.

Можно псевдографику задействовать, тогда каждый "пиксель" станет 2х2, но с цветами такого пикселя тогда поизвращаться надо.
Anatoly Moskovsky
Дата: 27.03.2015 15:32:48
Предлагаю не мелочиться и сразу видео отображать.
mayton
Дата: 27.03.2015 15:34:37
Go!Go! Давайте хотяб преведмир.
mayton
Дата: 27.03.2015 15:35:59
Dima T
mayton
Библиотека ncurses различает 8 цветовых констант. Но что-то мне подсказывает что
можно сымитировать больше.

Можно псевдографику задействовать, тогда каждый "пиксель" станет 2х2, но с цветами такого пикселя тогда поизвращаться надо.

Там хитрые символы есть. Прямоугольник. Со штриховкой.
RWolf
Дата: 27.03.2015 16:04:52
+ quick&dirty.c
#include <stdio.h>
#include <windows.h>   // WinApi header

int main()
{
  HANDLE  hConsole;
  int w, h, k;

  FILE *f = fopen("c.bmp", "rb");
  fseek(f, 0x12, 0);
  fread(&w, sizeof(w), 1, f);
  fread(&h, sizeof(h), 1, f);

  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

  // you can loop k higher to see more color choices
  for(int y = 0; y < h; y++)
  {
    fseek(f, 0x36+(h-y-1)*w*4, 0);
    for(int x = 0; x < w; x++)
    {
      int color, r, g, b;
      fread(&color, sizeof(color), 1, f);
      r = color & 0xFF;
      g = (color>>8) & 0xFF;
      b = (color>>16) & 0xFF;
      r >>= 7;
      g >>= 7;
      b >>= 7;
      int k = b<<2 | g<<1 | r;
      SetConsoleTextAttribute(hConsole, k);
      printf("Ы");
    }
    printf("\n");
  }

  getchar();  // wait
  return 0;
}

Картинка с другого сайта.