0 / 0 / 0
Регистрация: 14.11.2022
Сообщений: 3
1

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

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

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

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

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

главное чтобы в коде не прописывались случаи для каждого символа
например:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2022, 13:35
Ответы с готовыми решениями:

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

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

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

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

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

4
Эксперт .NET
11050 / 6966 / 1570
Регистрация: 25.05.2015
Сообщений: 20,973
Записей в блоге: 14
14.11.2022, 14:21 2
Возможно.
* Найти библиотеку которая нарисует символ в битмар и его прочитать попиксельно.
* Прочитать файл шрифта напрямую и вытащить из него необходимые данные. См. https://fontforge.org/docs/techref/pcf-format.html
1
0 / 0 / 0
Регистрация: 14.11.2022
Сообщений: 3
14.11.2022, 14:42  [ТС] 3
Цитата Сообщение от Rius Посмотреть сообщение
Возможно.
* Найти библиотеку которая нарисует символ в битмар и его прочитать попиксельно.
* Прочитать файл шрифта напрямую и вытащить из него необходимые данные. См. https://fontforge.org/docs/techref/pcf-format.html
У вас ссылка на слове "Возможно" не активна.
0
4263 / 3322 / 925
Регистрация: 25.03.2012
Сообщений: 12,515
Записей в блоге: 1
18.11.2022, 15:05 4
tomatos2121, В Виндоус или где?
В винАПИ наверняка есть рисование на невидимом HDC, который отображается в массив в программе
и можно на нём нарисовать DrawText

Добавлено через 1 минуту
Я как-то давно делал для себя примерчик двойной буферизации картинки в винапи-окне.
Там как раз сначала рисовалась картинка внутри массива обычными функциями рисования и только потом массив выводился на экран.
1
0 / 0 / 0
Регистрация: 14.11.2022
Сообщений: 3
21.11.2022, 10:47  [ТС] 5
так я на линуксе
на нём разве есть WINAPI?
0
21.11.2022, 10:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2022, 10:47
Помогаю со студенческими работами здесь

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

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

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

Мигающие пиксели
Добрый день. Прошу разобраться в проблеме. Купил недавно себе новый монитор ACER V236HLBD. В...

Отсечь пиксели
Написал код для загрузки спрайта: void DrawSprite(const char * FileName,int X,int Y,int...

Зеленые пиксели
На экране начали мерцать зеленые пиксели. Обычно пропадали после выключения монитора. С течением...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru