Форум программистов, компьютерный форум, киберфорум
Программирование графики
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/27: Рейтинг темы: голосов - 27, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.03.2024
Сообщений: 12

На базе какой библиотеки сделать программу для рисования?

04.07.2024, 10:17. Показов 8664. Ответов 109

Студворк — интернет-сервис помощи студентам
Добрый день, я хочу сделать графическое приложение а ля Paint для портфолио, но не знаю, какую библиотеку использовать
для этого – WinAPI или SFML? Кое-где вычитал, что можно даже Qt creator использовать. Дайте ответ, какую библиотеку использовать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2024, 10:17
Ответы с готовыми решениями:

Создать программу для рисования сюжетного рисунка. Рисунок должен содержать какой то сюжет: человек, природа, животные
///

Библиотеки для рисования(?)
Добрейший вечерочек, может уже кто-нибудь интересовался вопросом: а есть ли библиотеки для шарпа в которых т.н. инструменты для изменения...

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

109
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
07.07.2024, 12:18
Студворк — интернет-сервис помощи студентам
filt_file(9).mp4
SFML + Opencv.
два фрамеворка на msvc 2013.
Можно было ещё регион подогнать, по экрану гонять и увеличивать.
Эффект, как камера перемещает направл.
Только разрешение от этого больше не становиться.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
07.07.2024, 12:27
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
07.07.2024, 12:28
Детектор движения писал. И не плохо получилось.
0
07.07.2024, 12:40

Не по теме:

Цитата Сообщение от Наталья8 Посмотреть сообщение
И не плохо получилось
и что, сколько двигающихся, дрожащих и дергающихся объектов получилось пресечь?

0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
07.07.2024, 12:55
Ни скока.
Не работает оно больше.
Винду поменял. Ковыряться надо.\
А работало стабильно.
Несколько потоков делал.
Сколько камер, столько потоков.

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
while (!cap.read(frame) && --i)cout << "ERROR: Cannot read a frame from video file" << endl;
cv::Mat frame_for_abc;// Для размытого фрейма
        //------------------------      
double z_kern[25] = { // МАТРИЦА 5X5 //----   (МАЖЕТ ПО ГАУССУ) Что бы было меньше шуму
    0.000789, 0.006581, 0.013347, 0.006581, 0.000789,
    0.006581, 0.054901, 0.111345, 0.054901, 0.006581,
    0.013347, 0.111345, 0.225821, 0.111345, 0.013347,
    0.006581, 0.054901, 0.111345, 0.054901, 0.006581,
    0.000789, 0.006581, 0.013347, 0.006581, 0.000789,
};  Mat kernel_matrix = Mat(5, 5, CV_64FC1, z_kern); //  (CV_64FC1  ---> double... CV_32FC1 ---> float )
// накладываем фильтр
filter2D(frame, frame_for_abc, -1, kernel_matrix, Point(-1, -1));//<<<------------------
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
07.07.2024, 13:34
clip_n(1).mp4
Диска такого нет в системе.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
08.07.2024, 10:04
Цитата Сообщение от Наталья8 Посмотреть сообщение
Диска такого нет в системе.
шо там у вас за прожект, фрагменты которого вы все время раскидываете по форуму?
есть ли у него техническое задание?
или это такая ваша форма медитации?

типа, утром проснулись и решили написать функцию, приснившуюся этой ночью, а вечером стерли и забыли что писали?

а завтра следующее утро и т.д..
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
08.07.2024, 13:01
Не поверишь.
Кошка пряталась.
Хотел увидеть откуда вылезает...
Для тренировки вообще то.
Нуу я половину наворовал в разных местах.
Не сам же придумал....
А что такое тех. задание... Не знаю. В институтах не учился.
С картинками и камерами работать интересно. Не то что с цифрами.

Добавлено через 11 минут
Цитата Сообщение от XLAT Посмотреть сообщение
форма медитации?
Всё храню. Ни чего не выбрасываю.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
08.07.2024, 13:03
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
08.07.2024, 13:10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//========================================= 
    std::vector <std::thread> th_vec;
    int n(0);
    while (true){
    VideoCapture cap(n); // open the video camera no. 0
        if (cap.isOpened())  // if not success, exit program
            th_vec.push_back(std::thread(fork, cap, n));// Передача параметров через запятую, после fork 
        else { cout << "ERROR:  camera <"<< n <<"> not found" << endl; break; }// Если камер нет n останеться нулём
                Sleep(2000); ++n;
             }
    // while (1){ if (KEYDOWN(VK_ESCAPE))break; Sleep(50); }
    for (int i = 0; i < n; ++i){// при выходе из нулевого потока, подвешивает по очереди остальные
        th_vec.at(i).join();
            }
    //if(!th_vec.empty())   th_vec.at(0).join();
        Sleep(500);
Материнка крякнула.
Поменял - потоки работать перестали.
Глючное оно всё.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
08.07.2024, 13:22

Работает в два потока. Две камеры воткнул.
Два окна.
Два файла пишет...
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
08.07.2024, 13:27

Конечно сам изобретал.
Интересно было....
Теперь надо модератора, что бы всё на хрен удалил....
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
08.07.2024, 14:45
Цитата Сообщение от Наталья8 Посмотреть сообщение
А что такое тех. задание... Не знаю
ну, вот смотрите.

Мне нужен сплитер видоса:
1. есть видос mp4
2. нужно из его середины(+-) быстро и точно вырезать нужный фрагмент.
3. ключевые слова "быстро" и "точно".
4. сохранить его в файл.
5. качество клипа не хуже источника.
6. размер клипа не больше того, когда он находился в источнике.
7. весь процесс с минимумом кликов и прессов.
8. точность позиционирования: до отдельного кадра.

Наталья8, могёте сделать?
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
08.07.2024, 15:50
Ну и что?
Работаю я на таком.
Цитата Сообщение от XLAT Посмотреть сообщение
до отдельного кадра.
Ключевого кадра.

Добавлено через 14 минут
C++
1
avformat_seek_file(m_pFormatCtx, m_iVideoSt_indx, 0, ts / STEP, ts / STEP, AVSEEK_FLAG_BACKWARD);
Добавлено через 13 минут
mp4/h264 состоит из ключевых кадров.
Расстояние между ними заполнено не изображениями,
а изменениями изображений.
Через сколько кадров ключевой, зависит от настроек кодека.
Первый кадр, должен быть определённо ключевой.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
08.07.2024, 15:51
Цитата Сообщение от Наталья8 Посмотреть сообщение
Работаю я на таком.
давайте сюда, я тоже хочу на таком работать.

Добавлено через 1 минуту
Цитата Сообщение от Наталья8 Посмотреть сообщение
Расстояние между ними заполнено не изображениями,
а изменениями изображений.
Через сколько кадров ключевой, зависит от настроек кодека.
Первый кадр, должен быть определённо ключевой.
тока эту всю фикню спрячьте - это пусть прога сама автоматом делает.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
08.07.2024, 16:18
Цитата Сообщение от XLAT Посмотреть сообщение
на таком работать
Прости начальник. Только я. Прикол у меня такой...
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
08.07.2024, 16:22
Цитата Сообщение от Наталья8 Посмотреть сообщение
Прости начальник. Только я. Прикол у меня такой...
ясно.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
11.07.2024, 14:45
Сколько чудес можно уместить в стосемьдесят строк.
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include <windows.h>
//подключим SDL и stdio
#include <SDL.h>
#include <SDL_image.h>
#undef main
 
 
//---------------
#define KEYDOWN(vk_code)\
          ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code) \
          ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
 
auto get_color() {
    Beep(4000,8);
        LPPOINT pCursor = new POINT;// (GetCursorPos) ==== Возьмём образец цвета ====
    static SDL_Color col{};
        if (pCursor != NULL) {
            
            GetCursorPos(pCursor);
            HWND hwnd = GetDesktopWindow();
            HDC WINAPI hdc = GetWindowDC(hwnd);
    Uint32 color = GetPixel(hdc, pCursor->x, pCursor->y);
                               col.b = GetRValue(color);
                                 col.g = GetGValue(color);
                                    col.r = GetBValue(color);
                          delete pCursor;
        }
        //-------------
        return col;
}
 
 
// Нахерачить квадрат...
void add_dot(Uint32* pixels, short mouseX, short mouseY, SDL_Color color_sd, short size) {
    --mouseX; --mouseY;
    int color_n{ 0 };
Uint32 *col_struct = (Uint32*)&color_sd;
Uint32 *col_int = (Uint32*)&color_n;
*col_int = *col_struct;
//------------
for(short i= mouseY; i< (mouseY + size); ++i)
        for (short j = mouseX; j< (mouseX + size); ++j)
            pixels[i * 640 + j] = color_n;
    }
 
//============================
//============================
int main(int, char**)
{
    SDL_Init(SDL_INIT_EVERYTHING);
 
    SDL_Window *window = SDL_CreateWindow("CHIPint", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
    SDL_Renderer *windowRender = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED );// | SDL_RENDERER_PRESENTVSYNC
    SDL_Texture *texture = SDL_CreateTexture(windowRender, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, 640, 480);
    
    SDL_Surface* backgroundImage = SDL_LoadBMP("download.bmp");
    SDL_Surface* color_Image = SDL_LoadBMP("NewPicture3.bmp");
    SDL_Texture* color_Texture = SDL_CreateTextureFromSurface(windowRender, color_Image);
    
    SDL_Rect color_Postion = { 5//Коорд. вправо
        ,5//Коорд вниз 
        ,208,155 };// Размеры кнопочки.
    
    SDL_Texture* bgTexture = SDL_CreateTextureFromSurface(windowRender, backgroundImage);
    //SDL_Rect box = { 0,0,80,25 };// Не вырезаем
    SDL_Rect mousePostion = { 340//Коорд. вправо
        ,10//Коордю вниз 
        ,80,25 };// Размеры кнопочки.
    
    SDL_SetRenderDrawColor(windowRender, 103440, 200, 50, 100);
    SDL_Event event;
    bool quit = false;
Uint32 color_for{};
    Uint32* pixels = new Uint32[640 * 480];
    memset(pixels, 255, 640 * 480 * sizeof(Uint32));
 
    bool lmb = false;
    bool one = false;
    int mouseX_old{100}, mouseY_old{ 100 };
SDL_Color col{};
    SDL_Point mouse_Position;
    short sz{ 4 };
    while (!quit)
    {
        SDL_UpdateTexture(texture, NULL, pixels, 640 * sizeof(Uint32));
        
    if (KEYDOWN(VK_CONTROL)) // при нажатии мышкой (П.К.М.) на картинку ИЛИ на клавишу Ctrl    ---- Взять цвет ----
            col = get_color();
        
        while (SDL_PollEvent(&event) != 0)
        {
            switch (event.type)
            {
            case SDL_QUIT:
                quit = true;
                break;
            case SDL_MOUSEBUTTONUP:
                if (event.button.button == SDL_BUTTON_LEFT)
                {
                    lmb = false; one = false;
                }
                break;
            case SDL_MOUSEBUTTONDOWN:
                if (event.button.button == SDL_BUTTON_LEFT)
                {
// Клик мышкою в тот рект. mousePostion называеться.
                    SDL_Rect box1{};// Делаю два rect, для клика мыши по правой стороне спрайта и по левой
                    box1.x = mousePostion.x; box1.y = mousePostion.y; box1.w = mousePostion.w / 2; box1.h = mousePostion.h;
                    if (SDL_PointInRect(&mouse_Position// <-- Координаты курсора мыши (взял ниже)
                        , &box1)) { ++sz; Beep(3500, 8); }
                    SDL_Rect box2{};
                    box2.x = mousePostion.x + mousePostion.w / 2; box2.y = mousePostion.y; box2.w = mousePostion.w / 2; box2.h = mousePostion.h;
                    if (SDL_PointInRect(&mouse_Position// <-- Координаты курсора мыши (взял ниже)
                        , &box2)) {
                        --sz; Beep(2500, 8);
                    }
                lmb = true;
                    }
                else if (event.button.button == SDL_BUTTON_RIGHT)
                    memset(pixels, 255, 640 * 480 * sizeof(Uint32));
                break;
            case SDL_MOUSEMOTION:
                // Mouse click coords from event handler
            mouse_Position.x = event.motion.x;// Беру координаты курсора лля клика по спрайту...
                mouse_Position.y = event.motion.y;
                if (lmb)
                   {
                    int mouseX = event.motion.x;
                    int mouseY = event.motion.y;
                    
add_dot(pixels, mouseX, mouseY, col, sz);
                    
                if (mouseX_old != 0 && mouseY_old != 0 ) {
                        int mouseY_n = abs(mouseY - (mouseY - mouseY_old)/2);
                        int mouseX_n = abs(mouseX - (mouseX - mouseX_old)/2);
if (one)add_dot(pixels, mouseX_n, mouseY_n, col, sz);
                        
                one = true;
                    } 
                mouseX_old = mouseX;
                    mouseY_old = mouseY;
                    }
              break;
            }
        }
if (!lmb)SDL_Delay(50);// Пишут надо для работы
else SDL_Delay(1);
SDL_RenderClear(windowRender);// Это очищает цель рендеринга с цветом отрисовки, установленным выше.
 
SDL_RenderCopy(windowRender, texture, NULL, NULL);
//----------------
SDL_RenderCopy(windowRender, bgTexture,// исходная текстура.
    NULL,//rect Что бы вырезать из исходной, или NULL для всей текстуры.
    &mousePostion// целевая структура SDL_Rect или NULL для всей цели рендеринга;
);// Копировать часть текстуры в текущую цель рендеринга. (int) Возвращает 0 в случае успеха
  //----------------
SDL_RenderCopy(windowRender, color_Texture,
    NULL,
    &color_Postion
);
 
SDL_RenderPresent(windowRender);
    }
    delete[] pixels;
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(windowRender);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
11.07.2024, 14:53
1
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,242
11.07.2024, 14:57
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2024, 14:57

Библиотеки для рисования Statecharts в Java
Злравствуйте! Есть ли библиотеки, с помощью которых можно было бы рисовать statecharts (диаграммы состояний) на JAVA ? Попробовал...

Библиотеки для рисования трехмерных графиков функций
Доброго времени суток, подскажите пожалуйста, какие существуют библиотеки для рисования трехмерных графиков функций в С#?

Какие есть библиотеки для рисования на холсте и сохранения рисунка в файл?
нужно чтобы она делала что-то подобное: Canvas=Canvas(w,h) Canvas.Line(x,y) ........ Canvas.SaveToJpg(filename) т.е....

Объекты рисования: как вместо объекта рисования эллипса сделать линию
Подскажите как Принять размер клетки = 4 пиксела? И как вместо объекта рисованиея элипса линию сделать? Преобразование Масштабирование:...

Какой процедурой нужно пользоваться для рисования через canvas на image?
Как должен выглядеть код и какое свойство объекта нужно использовать, чтобы через canvas рисовать на image?


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить сумму и количество положительных элементов массива, расположенных в четных строках. Решение: Создан документ с. . .
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности. . . .
Обработка трёх чисел: утроение и возведение в степень
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Даны три действительных числа. Утроить те из них, значения которых неотрицательны, и возвести в четвертую степень отрицательные. . . .
Расчёт стоимости яблок по весу
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Написать программу вычисления стоимости некоторого количества (по весу) яблок. Решение: Создан документ, с табличной частью. . .
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru