PictureView 3 — просмотр изображений различных форматов

Здесь можно обсудить ваш любимый плагин.
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

В этой теме обсуждается плагин PictureView 3.
Старый тред с обсуждением предыдущих версий: PictureView 1 и 2.

Дальнейшее развитие версии 1.5, переделано под API Far 3.0.



Об извлечении плагинов из дистрибутивов ACDSee.


PS: API как было убогим в Far 2, так и осталось...
Attachments
PictureView3_20140813_last_xp.7z
Последняя версия, работающая на WinXP
(321.22 KiB) Downloaded 1185 times
Serg_Ekb
Posts: 18
Joined: Thu 17 Oct, 2019 13:43

PictureView 3 — просмотр изображений различных форматов

Post by Serg_Ekb »

Latest post of the previous page:

Попробуйте Far3 с «родной» версией плагина.
У Far3 есть множество принципиальных различий от far2 из-за которых пользователи на него не переходят, в том числе и я. И плагины специально пишутся для двух платформ.
Serg_Ekb
Posts: 18
Joined: Thu 17 Oct, 2019 13:43

PictureView 3 — просмотр изображений различных форматов

Post by Serg_Ekb »

HaRT wrote: Sat 12 Sep, 2020 14:49 Так они там не просто искажаются, а, очевидно, красный с синим перепутаны
Так и есть, и при изменении масштаба менее 50%, цвета отображаются нормально. Проверил на другом компе (версии far и плагина те же, железо и софт другие, винда и там и там 7), то же самое с цветами, искажения при масштабе более 50%.
Serg_Ekb
Posts: 18
Joined: Thu 17 Oct, 2019 13:43

PictureView 3 — просмотр изображений различных форматов

Post by Serg_Ekb »

HaRT wrote: Sat 12 Sep, 2020 14:49 Попробуйте Far3 с «родной» версией плагина.
Попробовал. Та же проблема. То есть проблема чисто моя, но как исправить не пойму.
upd
надо было в настройках плагина снять галочку у "sRGB gamma aware". Все заработало.
Last edited by Serg_Ekb on Sat 12 Sep, 2020 19:21, edited 2 times in total.
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

Отрисовка в версиях для Far3 и Far1 должна совпадать полностью (так как Far в этом никак не участвует).

Случайная инверсия цветов – типичная проблема с некорректной реализацией sRGB в некоторых драйверах (особенно этим страдают старые драйвера Intel). Как было замечено, лечится выключением sRGB режима или поиском более удачной версии видеодрайвера.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT »

Наблюдаю вылеты при открытии/закрытии определённых сканов (при работе через Remote Desktop, напрямую проверить пока не могу):
1. При попытке CtrlPgDn на том JPG-файле:
2. При выходе из просмотра того PDF-файла:
Сами сканы содержат персональные данные, поэтому выложить в открытый доступ не могу, но готов переслать частным образом. Других картинок, приводящих к такому вылету, за разумное время не нашёл.
Win 8.1 x64; Far Manager, version 3.0.5675.0 x86; PictureView 3.2019.10.9 (без других плагинов).

Кроме того, обнаружилось, что если имя PDF-файла содержит «юникодные» символы (например, китайские иероглифы или хотя бы знак рубля ₽), то такой файл на просмотр не открывается. Это возможно починить на стороне PictureView?
Фар есть инструмент, а не нянька. © 2009 DrKnS
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

С 1,2 скорее всего ничего не сделать – падает оно внутри системы в функции "показать нарисованный кадр". Попробуйте на нормальном реальном железе – не должно быть проблем с теми же файлами.

А вот PDF-файлы должны работать.
1) Проверьте, что libgfl340.dll юникодная – экспортирует gflLoadBitmapW.
2) Если это так и всё равно не работает – тогда пример файла.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT »

SEt wrote: Thu 15 Oct, 2020 11:28 Попробуйте на нормальном реальном железе – не должно быть проблем с теми же файлами.
Если не забуду, проверю, когда окажусь физически за тем компом (неизвестно когда).
SEt wrote: Thu 15 Oct, 2020 11:28 1) Проверьте, что libgfl340.dll юникодная – экспортирует gflLoadBitmapW.
Через плагин Process list посмотрел, какую libgfl340.dll грузит Фар; с удивлением обнаружил, что C:\Program Files (x86)\SageThumbs\32\libgfl340.dll; через fc /b убедился, что файл идентичен C:\Program Files (x86)\Far Manager\Plugins\PictureView\libgfl340.dll; через плагин ImpEx удостоверился, что символ gflLoadBitmapW экспортируется.
SEt wrote: Thu 15 Oct, 2020 11:28 2) Если это так и всё равно не работает – тогда пример файла.
Обнаружил-то я эту ошибку тоже на сканах, но сейчас проверяю так: скачал https://brendanzagaeski.appspot.com/minimal.pdf; убедился, что он просматривается; переименовал в minimal₽.pdf; убедился, что теперь он НЕ просматривается (при вызове плагина ничего видимого не происходит); переименовал обратно — снова просматривается.
Фар есть инструмент, а не нянька. © 2009 DrKnS
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

Действительно, не работает. Похоже, что внутри GFL путь для PDF не юникодный.
Могу предложить запускать такие PDF по префиксу через короткое имя, правда тогда не будут работать переходы между файлами.

Может проще прикрутить к PV нормальный декодер PDF через pvd или есть какой-то WIC кодек, который можно установить в систему?
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT »

SEt wrote: Thu 15 Oct, 2020 14:10 Похоже, что внутри GFL путь для PDF не юникодный.
Нет ли других возможных объяснений? Желательно таких, на которые мы можем повлиять в конструктивном ключе?
И что если попробовать для PDF вызывать не gflLoadBitmapW, а gflLoadBitmap, но с путём в UTF-8?
SEt wrote: Thu 15 Oct, 2020 14:10 Может проще прикрутить к PV нормальный декодер PDF через pvd
Увы, не владею вопросом.
SEt wrote: Thu 15 Oct, 2020 14:10 есть какой-то WIC кодек, который можно установить в систему?
Я не смог найти бесплатный, нашёл только FastPictureViewer Codec Pack.
Last edited by HaRT on Thu 15 Oct, 2020 14:54, edited 1 time in total.
Reason: Добавлен вопрос про gflLoadBitmap и UTF-8
Фар есть инструмент, а не нянька. © 2009 DrKnS
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

HaRT wrote: Thu 15 Oct, 2020 14:41
SEt wrote: Thu 15 Oct, 2020 14:10 Похоже, что внутри GFL путь для PDF не юникодный.
Нет ли других возможных объяснений? Желательно таких, на которые мы можем повлиять в конструктивном ключе?
И что если попробовать для PDF вызывать не gflLoadBitmapW, а gflLoadBitmap, но с путём в UTF-8?
Нет, оно там строит текстовый файлик для Ghostscript, прогоняя строчки через WideCharToMultiByte(CP_ACP).

И пока копался я там переполнение буфера нашёл в GFL...
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT »

SEt wrote: Thu 15 Oct, 2020 15:39 И пока копался я там переполнение буфера нашёл в GFL...
Печально. На практике это означает, что попытка просмотреть специально сформированную картинку/документ через libgfl может привести к выполнению произвольного кода, заложенного злоумышленником.
А можно пару слов, когда эта уязвимость проявляется, а когда нет?
Фар есть инструмент, а не нянька. © 2009 DrKnS
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

Я нашёл только про имя файла, но попасть туда довольно сложно.
bulochka
Posts: 5
Joined: Mon 10 Feb, 2020 17:28
Been thanked: 1 time

PictureView 3 — просмотр изображений различных форматов

Post by bulochka »

SEt, возможно ли для строки заголовка сделать так, чтобы параметр \I (текущий файл и общее кол-во файлов) считал только файлы изображений? В настоящий момент он даже ".." учитывает, это сбивает с толку при листании изображений в папке. А также просьба добавить параметр, с помощью которого можно было бы вывести в заголовок размер файла в KiB.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT »

bulochka wrote: Mon 26 Oct, 2020 07:53 В настоящий момент он даже ".." учитывает, это сбивает с толку при листании изображений в папке.
Вот да, конкретно это я тоже заметил недавно. Т.е. если для обычных директорий я ещё могу представить, что каждая из них соответствует одной картинке в каком-то формате, то .. в подсчёте точно лишняя.
Фар есть инструмент, а не нянька. © 2009 DrKnS
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt »

bulochka wrote: Mon 26 Oct, 2020 07:53 возможно ли для строки заголовка сделать так, чтобы параметр \I (текущий файл и общее кол-во файлов) считал только файлы изображений?
Версия для Far1 так и делает (исключает каталоги). Для Far3 выдаётся общее количество элементов панели, так как в API теперь нет быстрого способа узнать, файл или каталог каждый элемент.

bulochka wrote: Mon 26 Oct, 2020 07:53 А также просьба добавить параметр, с помощью которого можно было бы вывести в заголовок размер файла в KiB.
Подумаю. Возможно, сделаю в следующей версии.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

PictureView 3 — просмотр изображений различных форматов

Post by buniak_a_h »

SEt wrote: Tue 27 Oct, 2020 03:33 так как в API теперь нет быстрого способа узнать, файл или каталог
Такое не считается быстрым? Прошу прощения, если в синтаксисе напорол - на C с 94-го года прошлого тысячелетия не писал… Но идея понятна

Code: Select all

PanelControl(PANEL_ACTIVE, FCTL_GETPANELITEM, i, &pri);
if (pri->item.FileAttributes & FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY)
Post Reply

Return to “Обсуждение плагинов”