Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Как на C# выводить одну и ту же фотографию на несколько мониторов и синхронно менять её на иную

Anna | 17.06.2014 | нет комментариев
Проще каждого осознать, что я хочу сделать, посмотрев на функциональность хранителя экрана Яндекс.Фотки. Он берёт фотки из своей коллекции (я неизменно выбираю коллекцию самых знаменитых фоток за день) и показывает их по очереди на всех имеющихся на ПК мониторах. Но синхронно — то есть на всяком мониторе одна и та же фотка, после этого она меняется и эта новая вновь же показывается сразу на всех мониторах. Захотел повторить его функциональность из-за того, что в Windows 8 перестала трудиться его полезнейшая функция: при нажатии на «пробел» он сберегает нынешнюю картинку в «мои картинки» пользователя. Отчего-то даже ещё в «семёрке» это работало, а вот теснее в «восьмёрке» нажатие на «пробел» приводит легко к выключению хранителя экрана (видимо эта клавиша не перехватывается программой что ли?).

Так вот, я разобрался с API Яндекс.Фоток, сделал подгрузку надобных фоток в кэш на ПК, разобрался с итогом фотки на основной экран. А вот как сейчас повторять это всё на всех остальных экранах? Дело в том, что у меня создаётся форма, через которую выводится выбранная (во время Load формы) из каталога кэша фотка. Коротко так:

Image myImage = Image.FromFile(getFile);
screenBitmap = new Bitmap(myImage, region.Width, region.Height);///
Graphics MyGraphics = Graphics.FromImage(screenBitmap);
MyGraphics = this.CreateGraphics();
MyGraphics.DrawImage(screenBitmap, 0, 0);

Тут же в Load формы создаётся и запускается Timer.Start(); теснее внутри функции которого производится выбор и показ последующих фоток. И так до остановки хранителя экрана.

(подгрузка фоток, если что, производится в отдельном треде, тот, что запускается ещё из основной функции программы (Main) как-то так:
Thread myThread = new Thread(DownLoadFileInBackground);
myThread.Name = «Downloader»;
myThread.Start();)

Я в курсе, как обнаружить все мониторы через Screen.AllScreens. Но вот сейчас вопрос: как вывести то это всё на все мониторы и синхронно? DrawImage может рисовать за пределами формы? Тогда дозволено было бы сделать несколько вызовов DrawImage с различными координатами (и с различными битмапами). Но я проверил: DrawImage различные координаты понимает, но рисует только в пределах формы (которая у меня развёрнута только на каждый стержневой дисплей). Что ещё? Развернуть одну форму на все мониторы сразу, а потом на ней рисовать по координатам всякого монитора? Так дозволено? А как? Исключительно «а как» если мониторы, как у меня дома, не в линеечку, а настроены так: один слева от основного, а иной сверху над основным. Либо создавать кучу отдельных форм? По одной на всякий монитор? А как тогда осуществлять синхронизацию смены фоток, если у всякой формы будет свой Timer со своей функцией и своим случайным выбором дальнейшей фотки? Сделать выбор фотки внутри Main а не на форме и передавать следующую картинку всякой форме? А как это передать теснее открытой форме? Либо их закрывать всякий раз перед сменой картинки и открывать вновь, передавая параметр? А не получится ли при этом крепко приметного торможения и мигания хранителя экрана? Что-то ещё? Наверно наговорил много бессмысленностей — предварительно умоляю помилования! Подтолкните, пожалуйста, в положительном направлении! У Яндекс.Фотки как-то же получилось? :)

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB