Вопрос

Как я могу создать скринсейвер на C ++, при котором изображение появляется и исчезает в случайных местах экрана с заданной временной задержкой при исчезновении?

Поддержка нескольких мониторов была бы потрясающей.

Если у вас есть рабочий код или вы знаете, где я могу его достать, это было бы здорово.В противном случае укажи мне правильное направление.Я ищу метод, который имеет плавное и не запаздывающее мерцающее затухание.Заставка предназначена для Windows XP.

Я не знаю C ++, но я знаю AS3, Javascript и PHP.Поэтому я надеялся применить некоторые из этих знаний к C ++.

Что я должен использовать для его компиляции?

Это было полезно?

Решение

Прежде всего, если вы начинаете в C ++, не начинайте со специфичного для Windows компилятора, такого как Visual C ++. Получите хорошую кроссплатформенную среду разработки, которая поставляется с таким компилятором, как eclipse или code :: blocks . Как и любой проект, вы захотите разделить его на более мелкие задачи, которые вы можете выполнить поэтапно. Похоже, у вас есть пара препятствий.

<Ол>
  • Недостаток знаний C ++ (мы все были здесь когда-то)
  • Недостаток знаний об изображениях (очень распространенная проблема)
  • Недостаток опыта (мы над этим поработаем)
  • НЕ позволяйте другим отговаривать вас. Вы МОЖЕТЕ сделать это, и, вероятно, быстрее, чем вы думаете, возможно. ЧИТАЙТЕ одну или две книги о C ++, вы можете обойтись одним проектом, не зная многого, но вы будете часто разочаровываться. Давайте разберем ваш проект на множество маленьких целей. По мере выполнения каждой цели ваша уверенность в C ++ будет расти. <Ол>

  • Смешивание изображений
  • Заставка Windows с поддержкой нескольких мониторов
  • Screen Canvas (directx, opengl, bitmaps?)
  • Таймеры
  • Сначала давайте посмотрим на проблему смешивания изображений. Я предполагаю, что вы захотите "исчезнуть" изображение в любой фон окна у вас есть активный. Если у вас будет однотонный фон, вы можете просто сделать это, изменив альфа-прозрачность рассматриваемого изображения между обновлениями холста. По сути, вы хотите усреднить значения цвета каждого пикселя в двух изображениях на основе вашего таймера обновления. В более прямом смысле, чтобы найти элементы красного, зеленого и синего пикселей для любого результирующего пикселя (P3)

    N = отметки времени за интервал (секунды / миллисекунды / и т. д.)
    T = тики, которые произошли в этом интервале
    P1r = красный пиксельный элемент из изображения 1
    P2r = красный пиксельный элемент из изображения 2
    P3r = результирующий красный пиксельный элемент для смешанного изображения
    P1g = зеленый пиксельный элемент из изображения 1
    P2g = зеленый пиксельный элемент из изображения 2
    P3g = результирующий зеленый пиксельный элемент для смешанного изображения
    P1b = синий пиксельный элемент из изображения 1
    P2b = синий пиксельный элемент из изображения 2
    P3b = результирующий синий пиксельный элемент для смешанного изображения

    P3r = ((T/N * P1r) + ((N-T)/N * P2r))/2
    P3g = ((T/N * P1g) + ((N-T)/N * P2g))/2
    P3b = ((T/N * P1b) + ((N-T)/N * P2b))/2
    

    Теперь давайте посмотрим на проблему экранных заставок Windows и поддержки нескольких мониторов. Это действительно две отдельные проблемы. Заставки Windows на самом деле представляют собой только обычные .exe скомпилированные файлы с определенной функцией обратного вызова. Вы можете найти множество учебных пособий по настройке функций заставки в сети. Поддержка нескольких мониторов на самом деле будет проблемой при настройке Screen Canvas, о которой мы поговорим далее.

    Когда я ссылаюсь на Screen Canvas, я имею в виду область, в которой ваша программа будет выводить визуальные данные. Все приложения или учебные пособия по рендерингу изображений будут в основном относиться к этой же концепции. Если вы находите это особенно интересным, рассмотрите программу для выпускников или учебный курс в Computer Vision. Поверьте мне, вы не пожалеете об этом. В любом случае, учитывая основную природу вашего приложения, я бы рекомендовал не использовать openGL или DirectX, просто потому, что у каждого из них есть свой собственный уровень специфичных для приложения знаний, которые вам необходимо приобрести, прежде чем они будут полезны. С другой стороны, если вам нужны встроенные функции 3d, такие как двойная буферизация и разгрузка графического процессора, я бы выбрал openGL (более независимый от платформы). Множество забавных библиотек изображений также представлены в виде gimmes.

    Что касается поддержки нескольких мониторов, это сложная, но не сложная проблема. Вы просто устанавливаете границы холста (границы экрана) в соответствии с геометрией нескольких мониторов. Не должно быть проблем с несколькими мониторами с одинаковым разрешением, может быть сложно с несоответствующими разрешениями монитора (могут быть области холста, не отображаемые на экране и т. Д. Существуют хорошо известные алгоритмы и обходные пути для этих проблем, но, возможно, это выходит за рамки этого вопроса.

    Наконец, как

    Другие советы

    "Я не знаю C ++, но я знаю AS3, Javascript и PHP.Поэтому я надеялся применить некоторые из этих знаний к C ++ ".

    О боже, я полагаю, ты будешь удивлен.Чтобы выучить C ++:

    • Купите хотя бы одну или две очень хорошие книги (см. здесь).Не покупайте книги, которые не очень хороши.Они научат вас привычкам, от которых вам придется отказаться позже, чтобы добиться дальнейшего прогресса.
    • Ожидайте, что вам придется много писать практического кода с большим количеством чтения в промежутках.В первые несколько недель компилятор будет выплевывать на вас легионы непонятных сообщений об ошибках, ваш код будет продолжать давать сбои, а опытные программисты на C ++, глядя на ваш код, с отвращением всплеснут руками.И это всегда твоя вина.
    • Запланируйте много времени на обучение.И я имею в виду очень много.Независимо от того, сколько времени вы посвятите этому, пройдет как минимум пара месяцев, пока вы перейдете с "манекена" на "новичка".
    • Представьте, что вам приходится заниматься этим пару лет, чтобы стать настоящим профессионалом, постоянно читая книги и статьи, посвящая много времени группам новостей и дискуссионным форумам, учась у других, ударяясь головой о стены, окружающие ваш рабочий стол.
    • Будьте готовы изучать что-то, чего вы раньше не знали, хотя бы раз в неделю, даже после десяти лет работы программистом на C ++.
    • Просто на мгновение представьте, что я, возможно, не преувеличиваю это.

    Отредактируйте для уточнения:Я поддержал ответы Хантера Дэвиса и Элементаля, потому что они очень хороши, в значительной степени по существу, и в целом я поддерживаю поддержку, несмотря на мою разглагольствование там.На самом деле, я не сомневаюсь, что многие способны взломать что-то вместе на C / C ++, если им дать скелетный пример, даже если на самом деле они мало что знают о C ++.Продолжайте и попробуйте, есть большая вероятность, что вы создадите экранную заставку в разумные сроки.Но.Способность "взломать что-то вместе на C / C ++" далека от "изучения C ++".(И я имею в виду очень далеко.)

    C ++ - невероятно сложный, подлый и упрямый зверь.Я также считаю его почти умопомрачительно красивым, но в том смысле, что он, вероятно, отражает вид с очень высокой горы:Довольно трудно дойти до того момента, когда ты сможешь оценить красоту по достоинству.

    C ++ - сложный язык, и все, что указывает sbi, вероятно, верно (конечно, после 10 лет коммерческого программирования на C ++ есть еще, чему поучиться), НО я думаю, что если вы уверены в другом языке, это займет всего пару шагов. дней до: a) Установите один из упомянутых здесь компиляторов (я бы посоветовал VC как быстрый способ программирования Windows) б) Найдите пример кода экранной заставки, которая делает что-то простое, используя Windows GDI (в документации MS по экранным заставкам есть код) c) Измените этот код, чтобы сделать то, что вы хотите.

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

    Я бы посмотрел на Microsoft C ++ Express. Это бесплатно и довольно способно. Возможно, вам придется взломать его или получить более старую версию для создания неуправляемых исполняемых файлов.

    Существует много учебных пособий доступно для отдыха

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top