![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
rubbiroid |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.8.2006 Где: Германия Репутация: нет Всего: 1 |
Доброго времени суток!
Пишу каталогизатор фоток (C# .Net 2) и столкнулся с такой проблемой. Для испорта информации о фотке использую стандартный Bitmap и оттуда потом уже получаю разрешение и превьюшку.
Все работает хорошо... но медленно... Особенно если в цикле нужно обработать пару сотен фотографий. Согласно профайлеру 99% времени уходит на
Как бы ускорить этот процесс? З.Ы. Как вариант использовать самописный "декодер" Jpeg и подчитывать только размеры и превьюшку. Но как декодировать саму превьюшку? Я пока не нашел ничего более подробного чем "далее идет упакованные данные превьюшки" (перевод вольный). Это сообщение отредактировал(а) rubbiroid - 24.3.2008, 02:35 |
||||
|
|||||
Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: 3 Всего: 18 |
Не знаю как насчет ускорить, но можно вынести обработку в треды, и при открытии окна превьюшки будут открываться поочередно (в смысле визуально), как в Windows и разных программах аля AcdSee (приложение висеть в ожидании окончания цикла не будет).
|
|||
|
||||
vponomarov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 4 Всего: 12 |
rubbiroid, можно позаимствовать идею создания привьюшек у горячо любимой винды.
т.е. создавать привьюшки только один раз, а при повторном заходе в каталог грузить их откуда-нибудь а не создавать заново. еще можно попробовать разобраться как загружать привьюшки из файлов thumbs.db которые создает винда короче вариантов много ![]() |
|||
|
||||
rubbiroid |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.8.2006 Где: Германия Репутация: нет Всего: 1 |
vponomarov, Ну так оно и делается. Просто изначально ГДИ, как я понял, загружает ВЕСЬ файл в память (про декодирование не знаю, но мне кажется, что и декодирует). Соответственно, на это уходит много времени - ибо фотки по 2-3 метра. Если же подчитывать только заголовок Jpeg и парсить его ручками, то на это уйдет куда меньше времени ибо не 3 метра загружать надо и не 6МП декодировать. Как подчтать ручками размеры я вроде нашел, но вот что сделать с превьюшкой, которая зашита в фотку, я не знаю. Если кто скинет статейку про jpeg, где описана полная структура файла с EXIF и как что оттуда можно достать (типа Пошаговое создание собственного декодера JPEG) - буду безумно благодарен.
Voyager, Вариант тоже был, вот только никогда не писал многопоточек... Да и если сделать 2 потока (ну или по количеству процессоров), то все начнет упираться в скорость винта. Поэтому и хотель бы получить нужные мне данные НЕ загружая весь файл и НЕ докодируя его целиком. З.Ы. Кто-нить случаем знает, как определить количество процессоров в системе? Это сообщение отредактировал(а) rubbiroid - 24.3.2008, 13:17 |
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
-------------------- I don't need a reason being who I am... |
|||
|
||||
vponomarov |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 4 Всего: 12 |
сомневаюсь, что из нескольких потоков будет заметно быстрее. хотя попробовать конечно стоит.
ты меня очевидно не до конца понял. я пердлагаю один раз (пускай медленно) создать привьюшки и сохранить их на винте, а при последующих заходах в каталог грузить эти малнгькие картинки - это будет довольно быстро |
||||
|
|||||
rubbiroid |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.8.2006 Где: Германия Репутация: нет Всего: 1 |
QryStaL, Пасибо!
Сделал тестовое приложение с многопоточностью. Прирост производительности с двумя потоками почти 100%. Но все равно не хочется загружать весь файл. vponomarov, моя прога хранит превьюшки в себе. Так что я их получаю только 1 раз. И вот этот один раз на больших каталогах может идти несколько минут. К примеру на 200 фотках - 93 секунды (в 1 поток) на Core2Duo E4300. А если проц послабее? Вот поэтому и не хочется грузить весь файл. Да и смысла в этом особо нет, ибо он мне не нужен (ну, только если в нем самом нет превьюшки и ее надо ручками создавать) Это сообщение отредактировал(а) rubbiroid - 24.3.2008, 15:42 |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 2 Всего: 87 |
ты хочешь создавать превью без открытия изображения?
![]() |
|||
|
||||
rubbiroid |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.8.2006 Где: Германия Репутация: нет Всего: 1 |
Kefir, В Jpeg'ах кроме основной картинки хранится еще и превьюшка. Так вот мне она и нужна.
Мне не нужно декодировать все изображение. Только эту маленькую кртинку. А GDI при создании Битмапа из файла декодирует его, что мне абсолютно не надо. |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 5 Всего: 36 |
rubbiroid,
поскольку gdi+ при загрузке изображения прокачивает его целиком в память, более оптимальным вариантом будет ручное выдирание exif-тэгов из файла. Правда если там preview отсутствует, то его по-любому надо будет самостоятельно делать. Спецификация на exif здесь: http://exif.org/specifications.html |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 2 Всего: 87 |
Есть с чего начать - http://www.sentex.net/~mwandel/jhead/
Эта программулька по описанию занимается именно тем, что тебе надо. Покопайся в сырцах и перепиши как тебе надо. |
|||
|
||||
rubbiroid |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.8.2006 Где: Германия Репутация: нет Всего: 1 |
Kefir, Пасибо, посмотрю.
|
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
![]()
Это сообщение отредактировал(а) QryStaL - 30.3.2008, 00:49 -------------------- I don't need a reason being who I am... |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 2 Всего: 87 |
QryStaL, чем, собстевенно сей метод отличается от сабжевого?
|
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
Kefir, Быстродействием.
200 фотографий (3 МП) обрабатываются меньше секунды. Pentium 4 3GHz (Одноядерный с HT). Это сообщение отредактировал(а) QryStaL - 30.3.2008, 02:11 -------------------- I don't need a reason being who I am... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |