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

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

22.07.2014, 15:52. Показов 6007. Ответов 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
5500 / 4895 / 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
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru