С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 24.05.2014
Сообщений: 7

Преобразовать текст из *.txt (в любой кодировке) в картинку формата *.bmp

22.07.2014, 15:52. Показов 5904. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет)
Нужна помощь с написанием программы..нужна информация)

Задание:
Написать программу, которая преобразует текст из *.txt (в любой кодировке: ASCII, Юникод и др..) в картинку формата *.bmp.

Поискав информацию в интернете, я подумал что можно было бы сделать как-то так:
Из текстового документа берется текст и преобразуется в матрицу (каждый элемент которой - это пиксель со своим оттенком) по которой строится bmp изображение и этот текст уже становится изображением.
Проблема в том, что я не знаю как преобразовать текст в матрицу..
- Мб есть такая возможность брать информацию из шрифтов windows?
- Мб мне самому создать алфавит, т.е. матрицы для каждого символа - только это очень долго и нудно.

Это мое задание на практику, до этого были задания полегче.. Много искал в интернете на эту тему, но не смог найти то, что помогло бы мне в написании программы. Поэтому обращаюсь сюда за подсказками, может подскажете как все это можно реализовать и с помощью чего)
Изображения
  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2014, 15:52
Ответы с готовыми решениями:

Преобразовать bmp в текст
Здравствуйте. Собсвенно, вот проблема. Имеется капча - ЛК] , нужно преобраовать картинку в текст , задумка такая, сделать образец к...

Чтение файлов формата .txt в кодировке utf-8
Уважаемые форумчане! Делаю скрипт для чтения и записи txt-файлов из Excel-вского файла по средствам VBA макросов. Но всё упёрлось в...

Как преобразовать код в картинку BMP
У меня есть картинка BMP в виде такого текста, как его преобразовать в изображение ? ...

7
22.07.2014, 15:58

Не по теме:

Metaforij, это не особо похоже на С++ для начинающих)

0
22.07.2014, 16:07  [ТС]

Не по теме:

Цитата Сообщение от frostyfull Посмотреть сообщение
Metaforij, это не особо похоже на С++ для начинающих)
просто я начинающий, боюсь писать в раздел для экспертов)
такое сложное задание внезапно свалилось на мою голову..

0
61 / 50 / 12
Регистрация: 25.01.2010
Сообщений: 257
22.07.2014, 16:12
Может эта информация чем то поможет:

В библиотеке graph нет функции, обеспечивающей вывод на экран иллюстрации, находящейся в файле. Программист должен сам разработать такую функцию. Однако эта задача является довольно сложной. Ниже приведен текст разработанной автором функции draw, которая выводит на экран 16-цветную картинку — содержимое bmp-файла. Картинка должна быть создана в среде Microsoft Windows, например, при помощи графического редактора Paint.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h> #include <graphics.h>
 
/* Функция draw выводит на экран шестнадцатицветную
картинку, находящуюся в bmp-файле
 
*/ int draw(int xO, int yO, char* fname)
х00 — координаты левого верхнего угла
области вывода fname — имя файла картинки;
Значения функции:
>0 — высота иллюстрации; -1 — не найден файл; -2 — картинка не является шестнадцатицветной.
*/
// таблица преобразования кодировки // цвета Windows -> DOS
unsigned char color[16] =
{0,4,2,6,1,5,3,7, 8,12,10,14,9,13,11,15};
// прочитав из bmp-файла эту структуру, // можно получить информацию о картинке: //ее размере и количестве цветов struct bmpinfo {
char hl,h2; // файл должен начинаться буквами ВМ unsigned long
size, // размер файла, байт reserved, // резерв, не используется offset, // смещение данных относительно
// начала файла Ь, // не используется width, // ширина картинки height; // высота картинки unsigned int
plans, // кол-во планов, должно содержать 1 Ьрр; // кол-во бит на пиксел: 1, 4, 8 или 24
bmpinfo info; FILE *?;
// информация о картинке // файл иллюстрации
int x,y; // координаты пиксела unsigned char b; // байт, прочитанный из файла unsigned char bh; // сдвинутый на 4 разряда вправо
// старший полубайт unsigned char bl; // четыре младшие бита
// прочитанного байта int nb; // кол-во байт (кратное четырем)
// соответствующее строке
int np; // кол-во выведенных пикселов
int i,j;
if ((f = fopenffname, "rb")) == NULL) return -1;
// читаем информацию о картинке
fread(Sinfo, sizeof(info),1, f);
if (info.bpp != 4 )
return -2; // картинка не 16-цветная
x = xO;
у = yO + info.height;
nb = (info.width / 8)*4;
if ((info.width /8) != 0) nb += 4;
fseek(f, info.offset, SEEK_SET); ¦
// вывод иллюстрации
for (i = 0; i < info.height; i++)
np =0; // кол-во выведенных пикселов for (j = 0; j < nb; j++) // вывод строки {
b = fgetc(f) ;
if ( np < info.width)
{
bh = b » 4;
putpixel(x,y,color[bh]);
np++; } if (np < info.width)
Ы = b & 15;
putpixel(x,y,color[bl]); -
np++;
x=xO; y— ;
fclose(f);
return info.height;
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.07.2014, 16:20
http://jenyay.net/Programming/Bmp
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
22.07.2014, 16:25
Цитата Сообщение от Metaforij Посмотреть сообщение
Написать программу, которая преобразует текст из *.txt (в любой кодировке: ASCII, Юникод и др..) в картинку формата *.bmp.
http://msdn.microsoft.com/en-u... 85%29.aspx
http://msdn.microsoft.com/en-u... 85%29.aspx
http://msdn.microsoft.com/ru-r... 85%29.aspx

Добавлено через 1 минуту
Цитата Сообщение от Metaforij Посмотреть сообщение
такое сложное задание внезапно свалилось на мою голову..
Строк 10-20. На GDI+
0
 Аватар для maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
22.07.2014, 17:09
У тебя проблемы в постоновке задачи.
Во-первых, матрица bmp должна иметь линейные размыеры (ширину, высоту). Сразу возникает вопрос, откуда брать эти данные. Что делать если число символов не кратно ширине*высоту.
Во-вторых, надо определится глубиной цвета, мол сколько байт на один пиксель, самый простой вариант это 8битной изображение(для ascii один символ). Но если эта трансформация должна иметь какой-то смысл, то с Юникодом тяжелее. Надо разбиратся с видом преобразования уникода utf8 utf16 bomutf.
Ответь на поставленные вопросы, потом будем дальше решать твою проблему
0
28 / 23 / 12
Регистрация: 25.08.2013
Сообщений: 44
23.07.2014, 22:29
Metaforij, вот пример, выводит текст utf-8 в bmp файл.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <algorithm>
#include <iterator>
#include <fstream>
#include <memory>
#include <string>
#include <sstream>
 
#include <windows.h>
#include <Gdiplus.h>
#pragma comment( lib,"Gdiplus.lib" )
 
using namespace std;
 
int GetEncoderClsid( const WCHAR * format, CLSID * pClsid );
std::unique_ptr<CLSID> GetBMPClsid();
void InitGDI();
 
int main()
{
  namespace gdi = Gdiplus;
 
  ::InitGDI();
 
  const std::wstring TEXT_FILE     = L"A:/file.txt";    // где брать текст
  const std::wstring BMP_SAVE_PATH = L"A:/image.bmp";   // куда сорханять
 
  gdi::Bitmap bmp( 1000, 1000 ); // буфер, куда рисовать
  gdi::Graphics graphics( &bmp ); // графическое устройство, чем рисовать
  gdi::SolidBrush whiteBrush( gdi::Color::White );
  gdi::SolidBrush blackBrush( gdi::Color::Black );
 
  gdi::Font font( L"Arial", 12 );
  gdi::RectF rect( 100, 100, 800, 900 );
 
  std::ifstream text( TEXT_FILE );
 
  std::string string; // читаем файл в одну большую строку
  std::copy( std::istreambuf_iterator<char>( text )
             , std::istreambuf_iterator<char>()
             , std::back_inserter( string ) );
 
  graphics.FillRectangle( &whiteBrush, gdi::Rect { 0, 0, 1000, 1000 } ); // заливка фона белым цветом
 
  gdi::StringFormat format;
  std::unique_ptr<wchar_t []> buf( new wchar_t [string.length()]() );
 
  ::MultiByteToWideChar( CP_UTF8, NULL, string.c_str(), (INT)string.size(), buf.get(), (INT)string.length() );
 
  // рисуем текст
  graphics.DrawString( buf.get(), (INT)string.length(), &font, rect, &format, &blackBrush );
 
  // сохраняем 
  bmp.Save( BMP_SAVE_PATH.c_str(), GetBMPClsid().get() );
  return EXIT_SUCCESS;
}
 
 
 
 
std::unique_ptr<CLSID> GetBMPClsid()
{
  std::unique_ptr<CLSID> bmpClsid( new CLSID );
  ::GetEncoderClsid( L"image/bmp", bmpClsid.get() );
  return bmpClsid;
}
 
 
void InitGDI()
{
  using namespace Gdiplus;
 
  GdiplusStartupInput gdiplusStartupInput;
  ULONG_PTR gdiplusToken;
  GdiplusStartup( &gdiplusToken, &gdiplusStartupInput, NULL );
};
 
 
int GetEncoderClsid( const WCHAR * format, CLSID * pClsid )
{
  using namespace Gdiplus;
 
  UINT  num = 0;          // number of image encoders
  UINT  size = 0;         // size of the image encoder array in bytes
 
  ImageCodecInfo * pImageCodecInfo = NULL;
 
  GetImageEncodersSize( &num, &size );
  if ( size == 0 )
    return -1;  // Failure
 
  pImageCodecInfo = ( ImageCodecInfo *)( malloc( size ) );
  if ( pImageCodecInfo == NULL )
    return -1;  // Failure
 
  GetImageEncoders( num, size, pImageCodecInfo );
 
  for ( UINT j = 0; j < num; ++j )
  {
    if ( wcscmp( pImageCodecInfo [j].MimeType, format ) == 0 )
    {
      *pClsid = pImageCodecInfo [j].Clsid;
      free( pImageCodecInfo );
      return j;  // Success
    }
  }
 
  free( pImageCodecInfo );
  return -1;  // Failure
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.07.2014, 22:29
Помогаю со студенческими работами здесь

Как преобразовать текст из формата RTF в обычный текст?
Как преобразовать текст из формата RTF в обычный текст?

Преобразовать текст в картинку
Здраствуйте. Помогите найти программу для преобразования текста в картинку. Желательно, чтобы у программы были следующие возможности:...

Преобразовать картинку в текст
Добрый день! Как преобразовать картинку в текст? Наподобие этого: ...

Вывод текста в кодировке Win-1251 из bat-файла, текст которого в кодировке OEM-866
примем за аксиому утверждение: &quot;bat-скрипт следует создавать в кодировке DOS (OEM-866)&quot; ...пусть в скрипте есть код, который...

Накладывать картинку на картинку любой формы
Ищу вариант как на одну картинку накладывать другую=ссылку. Очень понравился вариант с использованием &lt;map&gt;&lt;area&gt;, но в чем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru