Прежде всего, если вы начинаете работу на C++, не начинайте с конкретного компилятора Windows, например visual C++. Захватите отличную кросс-платформенную IDE, которая поставляется с компилятором, например, eclipse или code::blocks. Как и любой проект, вы захотите разделить его на более мелкие задачи, которые вы можете выполнить поэтапно. Похоже, у вас есть пара препятствий.
- Отсутствие C Знание ++ (все мы были здесь когда-то)
- Отсутствие знаний о изображений (очень распространенный недуг)
- Отсутствие опыта (мы будем работать над этим)
Не позволяйте другим отговаривать вас. Вы МОЖЕТЕ это сделать и, вероятно, быстрее, чем считаете возможным. DO прочитайте книгу или две о C++, вы можете обойтись для одного проекта, не зная многого, но часто будете разочарованы. Давайте разложим ваш проект на множество небольших целей. По мере завершения каждой цели ваша уверенность в C++ будет расти.
- Изображение смешивания
- экран Windows Saver поддержки ж/нескольких мониторов
- экрана Canvas (DirectX, OpenGL, растровые изображения?)
- Таймеры
Во-первых, давайте посмотрим на эту проблему смешивания изображений. Я предполагаю, что вы захотите «угаснуть» изображение, о котором идет речь, в любой активный фон Windows. Если у вас будет сплошной цвет фона, вы можете просто сделать это, изменив альфа-прозрачность рассматриваемого изображения между обновлением холста. По сути, вы хотите усреднить значения цвета каждого пикселя в двух изображениях на основе таймера обновления. В более прямых терминах, чтобы найти красный, зеленый и синий пиксельные элементы для любого результирующего пикселя (Р3)
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 на самом деле являются только регулярными .exe скомпилированными файлами с определенной функцией обратного вызова. Вы можете найти множество руководств по настройке функций заставки в сети. Поддержка нескольких мониторов будет фактически вызвана тем, что вы настроите свой экранный холст, о чем мы поговорим ниже.
Когда я ссылаюсь на экранный холст, я имею в виду область, в которой ваша программа будет выводить визуальные данные. Все приложения рендеринга изображений или учебные пособия будут в основном ссылаться на эту же концепцию. Если вы считаете это особенно интересным, рассмотрите программу выпускников или курс обучения в области компьютерного зрения. Поверьте мне, вы не пожалеете. В любом случае, учитывая основную природу вашего приложения, я бы рекомендовал против использования openGL или DirectX, только потому, что у каждого из них свой собственный уровень специфических для приложения знаний, которые вам нужно приобрести, прежде чем они станут полезными. С другой стороны, если вы хотите встроенные 3d-тонкости, такие как двойная буферизация и разгрузка gpu, я бы пошел с openGL (больше агностик платформы). Множество интересных библиотек изображений приходят как gimmes также.
Что касается поддержки нескольких мониторов, это сложная, но не сложная проблема. Вы просто собираетесь установить границы вашего холста (границу экрана), чтобы соответствовать геометрии ваших многочисленных мониторов. Не должно быть проблемой с несколькими мониторами с одним и тем же разрешением, может оказаться сложным с несогласованными разрешениями монитора (может быть, области холста не отображаются на экране и т. Д. Известны алгоритмы и обходные пути для этих проблем, но, возможно, это выходит за рамки этого вопроса
Наконец, что касается требуемых таймеров, это должна быть самая легкая часть. Windows и Linux обрабатывают время своими странными способами (ПОЧЕМУ MS не реализует STRPTIME), поэтому, если вы заинтересованы в переносимости I 'd использовать стороннюю библиотеку, в противном случае просто используйте базовую функциональность windows settimer(), и ваше изображение будет отображаться в функции обратного вызова.
Дополнительная тема: Эй, если вы все еще читаете, есть ряд интересных алгоритмических улучшений вы можете е в эту программу. Например, когда ваш таймер сбрасывает заданные кванты каждую секунду, вы можете кэшировать первые несколько смешанных изображений и экономить время обработки (наши глаза не очень хорошо замечают различия между изменяющимися градиентами цвета). Если вы используете openGL, вы можете кэшировать наборы смешанных изображений в виде списков отображения (нужно использовать всю эту карту памяти для чего-то?). Веселый материал, удачи!
Помимо основы экранной заставки вам понадобятся некоторые возможности обработки изображений. Это не то, что я хотел бы пожелать кому-то в качестве начального проекта на C++. –