![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#12
|
||||
|
||||
![]() Цитата:
Сортировка всегда основывается на сравнении двух элементов по набору признаков, значит эта функция сравнения у тебя есть. Назовем её "условием F". Поэтому: 0) Делаешь переменную с одной (первой попавшейся) картинкой в памяти. Называем её "текущей". Сохраняешь в переменных её параметры. 1) Скачиваешь очередную картинку. 2) Вытаскиваешь нужные тебе признаки. 3) Проверяешь условие F для скачанной картинки и для текущей. Если по этим признакам скачанная картинка должна оказаться при сортировке до текущей - в переменную текущей картинки сохраняешь скачанную и меняешь переменные с параметрами. В противном случае выбрасываешь скачанную, т.к. она в любом случае не окажется первой при сортировке (ведь текущая до неё). 4) Если есть что еще качать - вернуться к п.1. Стандартная задача поиска минимума. Плюс, если подумать, параметр "размер" можно получить, не скачивая картинку вообще, параметр "тип" - скачав первые 4 байта, а параметры ширины и высоты в большинстве случаев - скачав заголовок картинки соответствующего типа. Поэтому если нужно, то при "анализе" можно выбирать нужную картинку, не скачивая ничего целиком, и уже после скачать полностью только ту, которая найдется этим импровизированным поиском минимума. При этом понятно, что скачивание занимает значительно больше времени, чем "анализ" ширины и высоты с размером. Поэтому скачивать можно в потоках, а "анализ" с перезаписыванием "текущей" синхронизировать через стандартные механизмы синхронизации потоков. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 07.03.2017 в 20:56. |