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

Из символа в пиксели

14.11.2022, 13:35. Показов 1496. Ответов 4
Метки c++, fltk, gui (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно ли реализовать преобразование любого символа в пиксели?

под пикселями я имею ввиду что-то наподобие вот этого:

░█▀▀█░
░█▄▄█░
░█░░█░

главное чтобы в коде не прописывались случаи для каждого символа
например:
C++
1
2
3
4
if(s == 'a')
{
    ...
}
Вообще по заданию мне надо из файла формата .pcf как-то взять битовую карту шрифта и по ней красить пиксели

Работаю на линуксе с подключенным fltk.

программа создаёт окно с пикселями
в дальнейшем
пиксели нужно окрасить в любой символ

tekzt.cxx
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
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
#include "tekzt.h"
#include <math.h>
#include <iostream>
char str[100];
int w, h, s, b, pix, piy;
 
Fl_File_Chooser *fnt;
 
Fl_Value_Input *W=(Fl_Value_Input *)0;
 
Fl_Value_Input *H=(Fl_Value_Input *)0;
 
Fl_Value_Input *S=(Fl_Value_Input *)0;
 
Fl_Value_Input *B=(Fl_Value_Input *)0;
 
Fl_Input *TEXT=(Fl_Input *)0;
 
Fl_Button *power=(Fl_Button *)0;
 
Fl_Button* result[500][500];
 
Fl_Double_Window *a;
 
Fl_Button *FONTS;
 
Fl_Double_Window *WOut(int w, int h, int s, const char* str, int x)
{
    a = new Fl_Double_Window(w, h, "Text");
    for(int i = 0; i < w;)
    {
        for(int n = 0; n < h;)
        {
             result[i][n] = new Fl_Button (i, n, s, s, "");
             result[i][n]->box(FL_FLAT_BOX);
             result[i][n]->down_color(255);
             result[i][n]->color(255);
             result[i][n]->down_box(FL_NO_BOX);
             n = n + s;
        }
        i = i + s;
    }
    pix = w / 2;
    piy = h / 2;
    for(int i = 0; i < 90;) // line x
    {
         result[i][20]->color(0);
         i = i + s;
    }
    a->show();
    return 0;
}
 
static void cb_fnt(Fl_Button*, void*)
{
    fnt->show();
    while (fnt->visible()) 
    {
        Fl::wait();
    }
}
 
static void *cb_power(Fl_Button*, void*) {
    w = W->value();
    h = H->value();
    s = S->value();
    b = B->value();
    sprintf (str, "%d",FONTS->value());
    printf("\n%s",str);
    WOut(w, h, s, TEXT->value(), FONTS->value());
    return 0;
}
 
int main(int argc, char **argv) {
    Fl_Double_Window* w;
    Fl_Double_Window* o = new Fl_Double_Window(405, 225, "Text builder");
    w = o; if (w) {/* empty */}
    { W = new Fl_Value_Input(60, 30, 100, 25, "W:");
    } // Fl_Value_Input* W
    { H = new Fl_Value_Input(60, 60, 100, 25, "H:");
    } // Fl_Value_Input* H
    { S = new Fl_Value_Input(60, 90, 100, 25, "S:");
    } // Fl_Value_Input* S
    { B = new Fl_Value_Input(80, 130, 100, 25, "Размер:");
    } // Fl_Value_Input* B
    { TEXT = new Fl_Input(185, 30, 170, 85, "\320\242\320\265\320\272\321\201\321\202:");
    TEXT->align(Fl_Align(FL_ALIGN_TOP));
    } // Fl_Input* TEXT
    { power = new Fl_Button(40, 170, 325, 35, "click!");
    power->callback((Fl_Callback*)cb_power);
    } // Fl_Button* power
    {
    FONTS = new Fl_Button(220, 130, 100, 25,"Шрифт");
    FONTS->tooltip("Выбор шрифта");
    FONTS->callback((Fl_Callback*)cb_fnt);
    o->end();
    } // Fl_Double_Window* o
    fnt = new Fl_File_Chooser("./fnt/", "*", Fl_File_Chooser::SINGLE, "Выберите шрифт");
    w->show(argc, argv);
    return Fl::run();
}
tekzt.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef tekzt_h
#define tekzt_h
#include <FL/Fl.H>
#include <FL/Fl_File_Chooser.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Value_Input.H>
extern Fl_Value_Input *W;
extern Fl_Value_Input *H;
extern Fl_Value_Input *S;
#include <FL/Fl_Input.H>
extern Fl_Input *TEXT;
#include <FL/Fl_Button.H>
extern Fl_Button *power;
#include <FL/Fl_Button.H>
extern Fl_Button *FONTS;
#include <FL/Fl_File_Chooser.H>
extern Fl_File_Chooser *fnt;
 
#endif
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.11.2022, 13:35
Ответы с готовыми решениями:

(пиксели окна != пиксели монитора) ?
HDC hDCScreen = GetDC(NULL); int Horres = GetDeviceCaps(hDCScreen, HORZRES); int Vertres = GetDeviceCaps(hDCScreen, VERTRES); ...

Ввод строки S и символа С. Результат: число повторений символа С и порядковые позиции вхождения этого символа в строку
Нужно составить программу, в которой пользователь вводит вручную строку S и символ C. Результатом программы должно быть число повторений...

Пиксели
Сначала дисплей 1000000x1000000 пикселей - бесцветный. По команде «X1, Y 1, X2, Y 2, Z» все пиксели в прямоугольнике с координатами...

4
Эксперт .NET
 Аватар для Rius
13044 / 7611 / 1663
Регистрация: 25.05.2015
Сообщений: 23,151
Записей в блоге: 14
14.11.2022, 14:21
Возможно.
* Найти библиотеку которая нарисует символ в битмар и его прочитать попиксельно.
* Прочитать файл шрифта напрямую и вытащить из него необходимые данные. См. https://fontforge.org/docs/techref/pcf-format.html
1
0 / 0 / 0
Регистрация: 14.11.2022
Сообщений: 3
14.11.2022, 14:42  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Возможно.
* Найти библиотеку которая нарисует символ в битмар и его прочитать попиксельно.
* Прочитать файл шрифта напрямую и вытащить из него необходимые данные. См. https://fontforge.org/docs/techref/pcf-format.html
У вас ссылка на слове "Возможно" не активна.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
18.11.2022, 15:05
tomatos2121, В Виндоус или где?
В винАПИ наверняка есть рисование на невидимом HDC, который отображается в массив в программе
и можно на нём нарисовать DrawText

Добавлено через 1 минуту
Я как-то давно делал для себя примерчик двойной буферизации картинки в винапи-окне.
Там как раз сначала рисовалась картинка внутри массива обычными функциями рисования и только потом массив выводился на экран.
1
0 / 0 / 0
Регистрация: 14.11.2022
Сообщений: 3
21.11.2022, 10:47  [ТС]
так я на линуксе
на нём разве есть WINAPI?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2022, 10:47
Помогаю со студенческими работами здесь

Пиксели
Как можно получить цвет пикселя формы??? Т.е. прочитать все пиксели формы.

Пиксели
Вот код :BmpData = MainBitmap.LockBits(new Rectangle(0, 0, MainBitmap.Width, MainBitmap.Height), ...

Пиксели.
Добрый день! Проблема в следующем. Есть задание в котором надо что бы пикслель бегал хаотично оставляя за собой след. Задание в...

Рисуем пиксели
Здравствуйте! С помощью каких операторов в C# рисуется пиксель ? Добавлено через 10 минут Что-то совсем запутался в задании...

Горячие пиксели
Господа, такая проблема... Купил две недели назад монитор Samsung BX2350, через неделю вылез мертвый потухший пиксель. Я его сменил на...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 05.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