purebasic.info
http://purebasic.info/phpBB3ex/

PBViewer (сырой Image Viewer)
http://purebasic.info/phpBB3ex/viewtopic.php?f=10&t=3270
Страница 3 из 4

Автор:  Пётр [ Пн май 26, 2014 8:15 am ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

newww писал(а):
PokeU(@bmp, $4D42)
Не проще и понятнее будет так?
Код:
1
bmp.u = $4D42


Автор:  newww [ Пн май 26, 2014 9:39 am ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

Угу, вот так теперь процедура выглядит, без датасекции:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
 
Procedure.s DetectEXT(FileId)
  EXT.u=0
  ReadData(0, @EXT, 2)
  Select EXT
    Case $4D42:ProcedureReturn "BMP"
    Case $FFD8:ProcedureReturn "JPEG"
    Case $4749:ProcedureReturn "GIF"
    Default: ProcedureReturn "Not an image file"
  EndSelect
EndProcedure
 



Петр, а есть ли нормальный метод записи последовательности байт {0xFF, 0x61, 0xFF, 0x62, 0xFF, 0x63, ..., oxFF, 0x7A} в *память,
кроме как mem$="яaяbяc...яz". В библиотеке Memory ничего нормально не нашел.
Ну кроме цикла конечно-

Автор:  Никита Однороб [ Пн май 26, 2014 9:45 am ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

По моему, в данной ситуации лучше завести константы для типов изображений, и возвращать числа, а не строки (для дальнейшего использования будет проще). Ну и в ReadData вместо "0" "FileId" впиши, а то работать не будет.

Автор:  newww [ Пн май 26, 2014 9:59 am ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

Угу, но это все мелочи, которые qpAHToMAS сам сможет исправить, тут главное принцып.
Хотя уверен, что есть более лучшие способы, нужно в исходниках других просмотрщиков смотреть.

Автор:  GOTO 110 [ Ср окт 07, 2015 10:02 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

Удалось кому-нибудь написать вивер с нормальным перелистыванием? Или хотя б про общий принцип почитать соображения. Есть ли на pb доступные сорсы декодера хотя бы для jpg? :?:

Автор:  Никита Однороб [ Ср окт 07, 2015 10:09 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

1) что значит нормальное перелистывание?
2) на форуме есть примеры GDI+

Автор:  Пётр [ Ср окт 07, 2015 11:40 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

GOTO 110 писал(а):
Есть ли на pb доступные сорсы декодера хотя бы для jpg?
Это нужно? http://www.purebasic.com/documentation/ ... coder.html

Автор:  GOTO 110 [ Чт окт 08, 2015 8:44 am ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

Никита Однороб писал(а):
1) что значит нормальное перелистывание?
Описано выше по теме, чтобы можно было перелистнуть не дожидаясь полной отрисовки картинки, чтобы вывод на экран был параллелен декодированию. Иначе вивер будет пригоден только для очень маленьких картинок. Встроенные функции этого не предусматривают. Так же не удается найти в хэлпе в каком формате pb запоминает изображения, и как получить адрес где оно записано.

Какой набор функций лучше использовать для вывода картинки?

Мой образец вивера это старый ACDSee Classic, но ему нужно усовершенствование.

Автор:  kvitaliy [ Чт окт 08, 2015 11:24 am ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

Декодирование jpg по моему опыту происходит практически мгновенно. Все тормаза при чтении большого изображения с носителя. Особенно заметно тормоз при чтении с флешки.

Автор:  GOTO 110 [ Чт окт 08, 2015 12:59 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

kvitaliy писал(а):
Декодирование jpg по моему опыту происходит практически мгновенно.
Для jpg размером от тысячи-двух пикселов уже начинаются сильные для листания тормоза, это видно у всех виверов, при повторном пролистывании файлы уже в кэше и читаются с озу. И нагрузка на цпу высока, что сразу слышно по громкому гудению пропеллера и можно промониторить. Но еще зависит от способа сжатия и оптимизации раскодирования. Программа Imagine например умеет листать не раскодируя полностью, но она тормозит отрисовать картинку целиком.

Автор:  kvitaliy [ Чт окт 08, 2015 1:41 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

GOTO 110 писал(а):
kvitaliy писал(а):
Декодирование jpg по моему опыту происходит практически мгновенно.
Для jpg размером от тысячи-двух пикселов уже начинаются сильные для листания тормоза, это видно у всех виверов, при повторном пролистывании файлы уже в кэше и читаются с озу. И нагрузка на цпу высока, что сразу слышно по громкому гудению пропеллера и можно промониторить. Но еще зависит от способа сжатия и оптимизации раскодирования. Программа Imagine например умеет листать не раскодируя полностью, но она тормозит отрисовать картинку целиком.

Ну и как вы то можете повлиять на результат?
Способ напрашивается из ваших рассуждений : загрузите в память сразу несколько изображений заранее, при листании они будут открываться очень быстро, а параллельно, в другом потоке, можно подгружать другие изображения и выгружать те, которые на расстоянии просмотра в 3-5 кадров.
В любом случае вам незачем знать способ кодирования-раскодирования, тут нечего ловить и нечего оптимизировать. Главный тормоз будет всегда скорость считывания с носителя, тем более, что большие изображения всегда на флешке из фотика, а это гораздо медленнее, чем раскодировать картинку в памяти компьютера.

Автор:  GOTO 110 [ Чт окт 08, 2015 3:09 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

kvitaliy писал(а):
Ну и как вы то можете повлиять на результат?
Нужно управление процессом чтения-раскодирования и отображения без ожидания окончания этих процессов.
Цитата:
3-5 кадров

Имеет смысл кэшировать предыдущую и последующую картинки. (При наличии возможности листать рэндомно уже их будет четыре, для разных вариантов следующей команды). Более проблему не решат, когда изображений от десятков до тысяч, тем более они могут быть и 5мб, и 25мб, и 100, и полугиговые. К тому же не хотелось бы сильно загружать все ядра цпу и тратить лишнее озу пытаясь решить проблему грубой силой, т.к. во время листания могут выполняться другие требующие вычислительных ресурсов задачи.
Цитата:
нечего оптимизировать

Читал на хабре пост одного чела который написал раскодировщик, там было сказано что получился работяющий, но очень медленный, если без применения специальных оптимизаций. По работе разных виверов это видно, разная скорость и загрузка цпу на одних и тех же файлах, наверняка из-за различий алгоритмов.
Цитата:
большие изображения всегда на флешке из фотика
Давно им почти не пользуюсь, все на винчестерах.

Автор:  kvitaliy [ Чт окт 08, 2015 4:55 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

GOTO 110 писал(а):
Давно им почти не пользуюсь, все на винчестерах.

Ностальгируете бо былому? Или фотоаппарат с винчестером?
В любом случае, я не верю, что вы ( или я ) способны написать раскодировщик jpg, который будет работать существенно быстрее, чем тот, что есть уже в Пурике. Даже если мы выиграем пару микросекунд, как это повлияет визуально на скорость листания, если всё равно всё упрется в скорость считывания с вашего винчестера? Попробуйте работать с SSD жесткиим диском, уверен, что скорость листания вас удовлетворит.

Автор:  Kuzmat [ Чт окт 08, 2015 5:07 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

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

Автор:  GOTO 110 [ Чт окт 08, 2015 5:58 pm ]
Заголовок сообщения:  Re: PBViewer (сырой Image Viewer)

Kuzmat
Все используют несколько потоков, одни запуская вспомогательные, другие используя одни и те же, но не более 2-4 для декодирования. Это можно изучить в менеджере задач умеющем показывать потоки. Результаты сильно разные. Из имеющихся под рукой сейчас - ACDSee Classic потратил 14 секунд на перелистывания 130 (520 мб) картинок, Honeyview32 не умеющий отображать частично за 45 секунд, при этом он гораздо быстрее других подобных - XnView, FSViewer и irfanview, которые в несколько раз медленнее. Imagine потратил 15 сек., но он отрисовывал меньшую часть чем ACDSee, и у него тормоза в отображении полной картинки. В данных примерах скорость винчестера не важна, так как все картинки попали в кэш после первого просмотра, cpu i7-870 (4 ядра/8 виртуальных). Так же важна отзывчивость интерфейса, негодная у программ пытающихся отобразить картинку целиком.

kvitaliy писал(а):
я не верю
Это не вопрос веры, следует подумать над технологией.

Страница 3 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/