- PVSM.RU - https://www.pvsm.ru -
Я читаю несколько фото-блогов, в которых иногда проскакивают «фото паки/сессии/репортажи». Плюс знакомые несут свои фото гигабайтами. Как только фотографий набирается довольно много (тысяч по 10-20) я их просматриваю оставляя себе на wallpaper'ы избранный 0,001% из них.
Фотоаппараты у всех всё лучше, фотографии весят всё больше, что не может сказаться на скорости их загрузки. Встала проблема с тем, как это всё эффективно разгребать. Почти все фотографии после разового просмотра удаляются, небольшое количество избранных перемещаются в папочку для wallpaper'ов.
Изначально пользовался либо Picasa, либо FSViewer. Но оба по некоторым причинам не устраивали.
Помучавшись немного начал писать свою утилиту, которая и стала PhotoSlider'ом.
Под катом подробности реализации и управления.
Инсталляшки нет, запускается из консоли. Понимает всего 2 параметра:
Рекурсивно сканирует текущую папку (с подпапками), всегда разворачивается на весь экран. Если есть возможность вывести несколько фото на экран (допустим, если 2 панорамы влазят по вертикали на экран не мешая друг другу), будут показаны несколько.
Управление следующее (не настраивается за ненадобностью, по крайней мере мне).
Фотографии подгружаются в отдельном потоке. Что бы не терять время на масштабирование при выводе на экран все фото масштабируются (с сохранением пропорций) под разрешение экрана в этом же (выделенном) потоке.
Отдельный поток занимается комбинацией фотографий для следующего экрана. При поступлении команды сначала показываются новые фото из скомбинированного экрана (что бы пользователь увидел их с как можно меньшей задержкой) и только потом старые фото релизятся/удаляются/перемещаются.
Что бы не забить всю память есть ограничение на количество висящих очереди фото (сейчас это это абстрактное ограничение: сумма всех фото (ширина * высота * 4) < 1024 * 1024 * 1024. Всё хочу переделать на ограничение в зависимости от доступной ОЗУ, но пока есть более интересные дела).
По ощущениям работает значительно живее остальных вьюеров (для описанных выше целей), но ожидал получить скорость побольше. Похоже где-то есть узкое место, но пока не профайлил ввиду отсутствия профайлера.
Из замеченных, но не отловленных дефектов:
Несколько последних коммитов не проверял весь функционал, возможно где-то ещё что-нибудь вылезет.
Всё это написано на C# под .NET 3.5. Писалось часто кусочками и в спешке, архитектура приложения весьма запутана. Надеюсь, как-нибудь соберусь и доведу код до нормальной читаемости. Комментариев по большей части нет, по этой же причине (+ изначально не планировал её развивать дальше «приложения на раз-два попользоваться»). Тестировалось только под Windows. Под Mono ничего не писал пока, скомпилируется или нет — не знаю. Хотя меня всё больше тянет перейти на ubuntu, может в будущем переделаю под mono.
Исходники выложены на Google Code [1] под GPL3.
Надеюсь данная утилита пригодиться ещё кому-нибудь кроме меня.
Автор: sibvic
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/4814
Ссылки в тексте:
[1] Google Code: http://code.google.com/p/photo-slider/
Нажмите здесь для печати.