LINUX.ORG.RU

Выбор графического тулкита для отображения raw-данных

 , ,


0

1

Доброго дня.

При разработке железа обычно к нему пишу одну-две технологических программок для настройки и управления им на C и GTK (кнопочки/поля ввода/консоль сообщений/gtkdatabox/...), для чего моих скромных навыков вполне хватало.

Сейчас делаем модуль для обработки сигнала РЛС и требуется включить в программку окошко, где будут отображаться сырые данные (bitmap 1024x1440 8-битных точек, обновление раз в 3 секунды) с радиолокационной картинкой. Требуется библиотека, которая сможет справиться с таким потоком, позволять накладывать слои и рисовать поверх простую векторную графику (кружочки/палочки/текст). Было бы здорово, если её можно было бы упихнуть в тоже GTK-окно и получать event-ы (клики мышкой, нажатие кнопок и т.д.).

Вроде бы просится SDL, но его вроде бы не очень просто подружить с GTK. Ещё есть cairo, но оно векторное, - будет ли держать такой поток данных?

Заранее спасибо!


возможно gstreamer (http://gstreamer.freedesktop.org/) c плагином rawparse пойдёт

с gtk точно дружит и поток 3 fps для него как-то ни о чём

кстати и кодить там совсем немного придётся, так что для поделок самое оно

MKuznetsov ★★★★★ ()
Ответ на: комментарий от MKuznetsov

GStreamer, возможно, overkill для такой работы. Да и векторную графику, как я понимаю, он рисовать «искаропки» не будет.

nav ()
Ответ на: комментарий от nav

Если бы ты писал программку на Qt, то там можно обернуть сырые данные в QPixmap и рисовать этот QPixmap на любом виджете. Помимо этого, прямо на этом виджете можно рисовать примитивы (точки, полигоны, линии, текст), получать координаты мышки, нажатия клавиш и обрабатывать их.

Если требуется интерактивность, можно заюзать Graphics View Framework, позволяющий интерактивно перемещать данные на карте и даже учитывать коллизии. Это всё идет «из коробки».

На Gtk+/SDL всё это тоже можно сделать. Но кода будет довольно много и будь готов использовать разные подпорки.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Если бы я был программистом, то обязательно взялся за Qt.

Однако, мой хлеб — P-CAD, Verilog и C, поэтому хотелось бы решить задачу не погружаясь в C++ и новые тулкиты.

Как думаете, сойдёт ли Cairo? Будет ли для него проблемой большой bitmap?

nav ()

Не уверен как лучше всего, но я бы использовал OpenGL, рисуя битмапы в одну текстуру, и рисуя кружочки с помощью Cairo в другую. Но тут есть один нюанс, я годами программировал на OpenGL, и написал с десяток Gtk программ и наверное штук 5 на Cairo. Если вам прийдется с нуля возиться, то я не знаю как лучше.

vertexua ★★★★★ ()
Ответ на: комментарий от vertexua

Да что ты говоришь! Почему это они без этой дряни не обойдутся?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Вектор лучше рисовать тем, что умеет рисовать вектор. У них начнет усложняться UI и закончится тем, что они будут трахаться с рисованием этого всего вектора через OpenGL. Cairo сразу даст нормальные масштабируемые круги со сглаживанием без онанизма с треугольниками и возней со сглаживанием OpenGL

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от vertexua

Да не, говорю тебе, опенгль прекрасно рисует вектор. А для "кнопочек" и прочей ненужной фигни можно один раз потратить месяцев 2-30, да нарисовать отличную гуебиблиотеку в чистом опенгле. И люди спасибо скажут, и сам будет пользоваться.

// давно такое хочу, но пока что, к счастью, никакой гуйни не нужно

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

да нарисовать отличную гуебиблиотеку в чистом опенгле

Не нужно

Твои заблуждения проистекают от неосиляторства Cairo

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от vertexua

А ты не думал, что я просто после ковыряния в недрах этого убожества, не могу уже на их API спокойно смотреть? Меня от одного вида glib блевать тянет!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

И вообще, я уже неоднократно говорил: если меня заставят пользоваться каким-либо дерьмом (будь то мастдайка, systemd, пхытон или еще какая хрень), я просто переквалифицируюсь в дворники!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Нет, это когда счетчики ссылок не нужно руками увеличивать и уменьшать

vertexua ★★★★★ ()
Ответ на: комментарий от Gvidon

Фанатики такие фанатики

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

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

однозначно cairo

Спасибо, буду пробовать.

А почему не OpenGL?

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

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

nav ()

Кружочки-палочки-текст надо как-то менять или вывел/убрал в нужных местах и всё?

C Event-ами от DrawingArea что надо делать?

anonymous ()
Ответ на: комментарий от nav

Да и векторную графику, как я понимаю, он рисовать «искаропки» не будет.

добавь cairo с прозрачным фоном в конвеер, наложи и рисуй поверх видео..в чём проблема?

MKuznetsov ★★★★★ ()
Ответ на: комментарий от vertexua

Gtkmm, Cairomm

Ну с gtkmm ещё понятно, он реально упрощает возню с наследованиями при создании своих виджетов. Но нужен ли cairomm? Наследования я там не заметил. Просто чтобы не писать префикс «cairo_»?

i-rinat ★★★★★ ()
Ответ на: комментарий от Eddy_Em

один раз потратить месяцев 2-30

30

Проняло чуть не до слёз. Как говорится, если программисту дать в два раза больше времени, он напишет в два раза больше кода обычного качества, и всё ещё будет жаловаться, что не дали времени сделать «как надо».

По теме: освоение Cairo занимает от 3 часов до пары дней.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

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

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

А чего там проняло-то?

Разрабатывать 30 месяцев библиотеку в отрыве от её применения просто невозможно. Вообще говоря, разработка библиотек требует большей квалификации, нежели разработка программ. Иногда значительно.

сам можешь глянуть на мои высеры

Глядел я на код. Ничего не понятно. И странное дело — я экономил пробелы, когда скорость набора была низкой, но это прошло. А ты вон как тексты строчишь, а всё равно в программах все выражения скомканные.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Разрабатывать 30 месяцев библиотеку в отрыве от её применения просто невозможно.

У меня и не такое возможно: я CGI'шную библиотеку больше двух лет назад пилить начал, так и не допилил. Просто не получается взять, да выделить время для непрерывной разработки. Всегда приходится делать тяп-ляп с тем, что когда-нибудь потом еще что-нибудь дотяпляпаешь. Скажем, в той же CGI'шной библиотеке пока я надумывал прифигачить к ней поддержку вебсокетов, уже появилась libwebsockets... Еще одна эпическая штука у меня с переменным успехом уже лет 5 "разрабатывается". По весне было сделал мощный рывок, но матмодель что-то чуть-чуть не сошлась, и я опять забил.

Вообще говоря, разработка библиотек требует большей квалификации, нежели разработка программ. Иногда значительно.

Это если ты будешь что-нибудь хитрое разрабатывать, а не какую-нибудь фигню типа кнопочек и ползуночков на опенгле.

А ты вон как тексты строчишь, а всё равно в программах все выражения скомканные.

Не люблю, когда строки длинней 80 символов, да и много строк не люблю (чтобы не приходилось подолгу pgUp/pgDn по одной функции что-нибудь искать). Ну и культуры программистской нет у меня, т.к. я не программист. Это, кстати, "самоучек" во многих областях отличает: я могу прекрасно ложить кафель, но вот как-то что-то все равно не так, как у специалиста получается; могу сплошной шов сварить, но не с первой попытки и т.п.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

больше двух лет назад пилить начал, так и не допилил

Это подтверждает то, что я говорил. Писать-то можно, но без конкретной цели ничего не получится.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Прикол в том, что в таком "половинчатом" недопиленном виде оно у меня уже используется.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от i-rinat

Обычно переход на С++ для GObject библиотек означает автоматические счетчики ссылок.

vertexua ★★★★★ ()
Ответ на: комментарий от nav

Для отладочной программы, думаю, достаточно кайро. В своем гткшном радаре использую как OpenGL(GLES2, EGL) - для вывода основного изображения, так и кайро - для реализации электронной лупы в отдельном окошке. В кайро легче разобраться, а с опенгл пришлось повозиться, особенно с выводом текста.

Vitaly1988 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.