Ответы пользователя по тегу C++
  • Обрезание изображения по 3 точкам opencv?

    @rPman
    Попиксельно пройдитесь по области внутри трехугольника.
    Вот как это делают для всего изображения, остается заменить в нем два вложенных цикла по всем точкам на точки трехугольника.

    Про треугольник ищите алгоритм попиксельной заливки треугольника или напишите его сами, для пиксилизации линии берите алгоритм Брезенхэма
    Ответ написан
    4 комментария
  • В чём проблема создания окна?

    @rPman
    смотрите что вернул GetLastError()
    https://docs.microsoft.com/en-us/windows/desktop/d...
    Ответ написан
    Комментировать
  • Какой выбрать C++ компилятор под Windows?

    @rPman
    Очень часто разработчики под windows с самого начала начинают работать с visual studio и с его немного несовместимым компилятором и std библиотеками, из-за чего последующие попытки собирать код из стандартного окружения порождают кучу работы, на нее забивают и продолжают сидеть на майкрософтовском.
    Самостоятельная настройка окружения для сборки под windows тут возможна (без загрузки visual studio) но поверьте, вам не захочется вручную загружать и настраивать сотни пакетов, никто этой фигней не мается. Ставят visual studio с интерфейсом, а там никто не мешает использовать командную строку.

    В общем случае, с вероятностью 99.9999999999%, вам будет НЕДОСТАТОЧНО только компилятора, вам нужны еще и библиотеки, настроенные на ваше окружение. Т.е. в зависимости от того под какую архитектуру и операционную систему вы собираете библиотеки/бинарники, и будет соответствующий ответ.

    Наиболее полно готовый и почти настроенный тулчейн (почти и наверняка это будет gnu compiler, но ничто не помешает использовать clang) можно найти в linux операционных системах, т.е настроив кросскомпиляцию из linux окружения можно будет собирать все, кроме наверное macos (ну там свои заморочки и это не невозможно).

    Только там, одинаково просто, можно будет собирать как windows приложения так и arduino скетчи.

    p.s. для настройки linux дистрибутива интернет вам понадобится только что для поиска документации, репозитории (тех же debian/ubuntu) можно приобрести на компакт дисках или сделать свой offline инсталятор.

    p.p.s. вы можете попытаться использовать windows 10 (не домашние) подсистему linux, установив в нее ту же ubuntu, и без каких либо накладных расходов (это не виртуалка, это скорее wine наоборот) работать

    Ближайший аналог удобного окружения но под windows это mingw (много рукошевелений) и cygwin, последняя так вообще копирует linux, но там свои заморочки, например файловые пути в итоговом приложении для совместимости будут вида /cygdrive/c/...., плюс совместимость dll своя, ни с чем не совместимая.
    Ответ написан
    1 комментарий
  • Как реализовать "КЛИК" в C++ DOS?

    @rPman
    По уму вам достаточно отслеживать событие поднятия кнопки мыши и именно его считайте кликом, но более верно записывать даты последнего нажатия и отжатия кнопки (для каждой кнопки пара переменных) и если разница между ними меньше определенного порога то считать что есть клик
    Ответ написан
    2 комментария
  • Как скомпилировать код внутри скомпилированного кода?

    @rPman
    Готовые инструменты советую искать в инфраструктуре LLVM, это виртуальная машина, компиляторы и главное отличная поддержка огромного количества платформ. И главное у вас есть возможность запускать эти приложения в контролируемой вами песочнице, если я верно потелепатствовал о ваших целях.

    С точки зрения использования это сложнее чем подключить какой-нибудь интерпретируемый популярный язык типа lua, но зато высокая производительность и гибкость.
    Ответ написан
    Комментировать
  • Как создать программу для захвата видео с экрана?

    @rPman
    GpGpu для программиста на текущий момент выглядит так - на неком языке (все поддерживают opencl, а nvidia в частности свою cuda, но онро идеологически похоже), очень похожем на c++, пишется код, с одним callback методом, который будет вызываться последовательно и параллельно (это решит драйвер видеокарты, вы этим не почти управляете) для элементов вашего массива, который по факту - текстура в памяти (на низком уровне вы тут не заморачиваетесь) и сохраняет результат в другой.

    Передача данных между обычным обычной оперативной памятью и видеокартой, объективно самая дорогая операция, и обычно стараются свести такие копирования к минимуму (т.е. на старте и под конец, для получения результата). Причем на столько, что к примеру получение содержимого экрана в оперативную память и копирование ее обратно в формате, понятному вашему cuda приложению будет занимать 99% времени если не 1099% (вы же хотите fullhd/4k 60 fps? а скорости может тупо не хватить), не говоря уже о самом преобразовании форматов.

    Поэтому вам придется решить инженерную задачу, как расшарить данные между текстурой в памяти видеокарты, в которой лежит экран и вашим cuda приложением, и я боюсь это будет тот еще квест, там наверняка и права доступа весело вылезут, и привязка к чипу видеокарты и что-нибудь еще.

    Если у вас получится, вам придется разработать (или найти готовый) эффективный алгоритм, кодирующий видео с использованием многоядерного процессора видеокарты (тысячи не очень шустрых процессоров), а это значит очень глубоко погрузиться в кодирование видео, на столько что вопросы в той формулировке что вы задали не появятся, ибо другой уровень знаний (повыше) для этого требуется.

    p.s. nvidia уже вроде несколько лет назад пиарилась на том что разработала такие алгоритмы для эффективного стриминга экрана приложений и игр по сети с минимальной задержкой, в т.ч. в железе.
    https://developer.nvidia.com/nvidia-video-codec-sdk
    Ответ написан
    Комментировать
  • Как автоматизировать сборку зависимостей программы?

    @rPman
    Возьмите тот же make, мы все привыкли что makefile содержат какой-нибудь автогенирированный эпический код, в котором уже давно никто полноценно не разбирается, но вообще то это неплозая система автоматического контроля версий файлов и сборки с учетом зависимостей.

    Когда вы пишите
    целевой_файл:используемые файлы
      командная строка для сборки целевого файла
    вы фактически описываете процесс, когда make проверяет версии используемых файлов по цепочкам зависимостей автоматически и запускает соответствующие команды.

    Для каждой своей зависимости у вас можно написать bat-файл, который переходит в нужный каталог и пересобирает ее, затем копирует результат в каталог вашего проекта. Вы можете для каждого написать по паре строчек в вашем makefile указав в качестве используемых файлов вообще все файлы каждого проекта или лучше какой-нибудь один (например index файл из их git каталога) и все, при любом обновлении у вас будет происходить запуск сборки. Затем вы можете добавить этот makefile в ваш проект (либо вручную прописать его вызов) на сколько я помню в visual studio есть куча возможностей для этого.

    Да, бывают проблемы посложнее, когда для сборки очередной версии нужно совершать какие то действия, описанные в обычном текстовом файле для человека, к сожалению универсального решения вы не найдете,.. это и есть та работа, которую выполняют мейнтейнеры любого приложения - следить за этим хозяйством.
    Ответ написан
    Комментировать
  • Как проверить многоканальность оперативной памяти на C++?

    @rPman
    ищите библиотеки для работы с DMI есть по до все операционные системы
    не уверен, но кажется память либо вся работает в многоканальном режиме либо нет, это флаг на ее всю.
    Ответ написан
    Комментировать
  • Брут 18 значного числа?

    @rPman
    https://gist.github.com/epixoip/a83d38f412b4737e99...
    8x Nvidia GTX 1080 дает ~ 200Gh/s
    т.е. ваш диапазон оно переберет за пару месяцев (возможно незначительно быстрее, так как входящая строка у вас очень маленькая).
    Ответ написан
    Комментировать
  • Как работает scanf в плюсах?

    @rPman
    char buf[256];
    fscanf(stdin,"%255[\n]",buf);

    язык разметки в scanf необычный но позволяет очень быстро парсить строки (например простые csv без экранированных ковычек и разделителей в строках, содержащих например числа).
    Ответ написан
    Комментировать
  • WinAPI :: Что происходит при закрытии программы в виндовс?

    @rPman
    wm_destroy это просто просьба к приложению, закрыть окно (не приложение)
    по неписанным правилам ui, в windows, по закрытию последнего окна приложения (их может быть несколько) само приложение должно быть закрыто.

    В вашем случае при отмене необходимо вернуть в return кажется true (посмотрите документацию) этим вы скажете вызывающей функции что процесс передумал закрывать окно и не будет его удалять. Смутно помню что вы должны были перед return еще какой то метод вызвать - обработчик событий окна по умолчанию, вот как раз при отмене закрытия его вызывать не нужно будет.
    Ответ написан
    Комментировать
  • Необходимо передать некий массив с одного процесса на другой, Как это сделать?

    @rPman
    разделяемая память, пайпы и memory mapped файлы
    для передачи событий - семафоры

    есть кросспатформенные библиотеки, например libevent
    Ответ написан
    Комментировать
  • Какие подводные в написании своего мини Total Commander?

    @rPman
    В зависимости от того, какой именно аспект Total Commander вы желаете повторить, такие проекты как целый город со своими улицами, подземками, мусорными свалками и гипермаркетами.

    Возьмите проект по проще.
    Ответ написан
    Комментировать
  • Работа с файлами в C++. Как считать построчно из файла такие строки?

    @rPman
    читайте файл построчно, затем удаляйте из строк пробелы
    Ответ написан
    Комментировать
  • Возможна такая схема встраивания скриптового языка?

    @rPman
    гугл выдал первой же ссылкой https://habrahabr.ru/post/197262/
    Ответ написан
    Комментировать
  • Как произвести очистку заголовочного файла C/C++?

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

    Могу предположить что в итоге вам нужен файл с парами 'имя макроса' - значение, я решал это в два этапа, сначала получение списка необходимых дефайнов (в моем случае это решалось в полуавтоматическом режиме, работая с текстовыми файлами в редакторе + регулярные выражения и т.п.), а затем на основе списка этих строк я генерировал cpp код, который выглядел как print ("name =" + name + "\n"); для каждого дефайна, затем полученный код компилировался и запускался - в итоге он выводил мне в нужном мне формате список значений дефайнов.
    Ответ написан
    Комментировать
  • Дилемма выбора между C++ и Java

    @rPman
    Выбор между с++ и java (добавьте сюда .net c# ) это больше не выбор между языками программирования и синтаксическим сахаром, а выбор между фреймворками (библиотеками) которые идут вместе (или для) с этим языком как 'стандарт по умолчанию'.
    Тем более эти языки на столько похожи, они вышли то и одного лона 'старого c++'!

    А это значит выбирайте то что вам нравится, но будьте готовы просто выучить еще один фреймворк (и чуть чуть языковых конструкций), ведь программист, не готовый изучать что то новое… слабовато выглядит и заранее обречен на провал.
    Ответ написан
    1 комментарий
  • Сделал программный проект, базирующийся на Windows 7 Embedded, теперь надо обновлять все это дело?

    @rPman
    — я смешал в одной миске мороженное (его очень любят дети), мясной рулет с тушеной картошечкой (ммм, питательно), кофе и черный чай (я не знаю что больше любит заказчик), и пропустил его через миксер, чтобы влезло в тюбик. Теперь это завтрак для космонавтов.
    — я все правильно сделал?
    Ответ написан
    Комментировать
  • Почему sscanf использует запятую вместо точки при использовании русской локали в linux?

    @rPman
    Очень осторожно пишите программы, работа которых может зависеть от установленной локали, встречал людей, которые меняют параметры локали в windows очень причудливым образом.
    Везде, где возможна подобная неоднозначность принудительно прописывать параметры локали (как в windows так и в linux).

    В данном конкретном случае лучше постараться избежать сохранение и использование текстового представления таких неоднозначных вещей как вещественные числа и даты… первый же запрос в гугл на вашу задачу — сериализация вещественного числа в целочисленном представлении: stackoverflow.com/questions/4733147/portability-of-binary-serialization-of-double-float-type-in-c
    Ответ написан
    2 комментария