LoadPicture и битые картинки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

LoadPicture и битые картинки

Сообщение Floyd » 25.03.2011 (Пт) 13:04

Добрый день.
Иногда попадаются в общей массе битые джипеги,
то есть файл существует, но отображается как будто недокачанная картинка - снизу серая полоса.
при попытке загрузить такую картинку
Код: Выделить всё
Set o_ = LoadPicture(s_localFotoPath & s_fn)

выкидывает с ошибкой.
Причем, если заупскать из-под VB - проглатывает и все работает нормально.
После компиляции программы в .exe - на этой строке выкидывает окно "Программа будет закрыта, обратитесь к разработчику"
и закрывается.
Ума не приложу, как попытаться проверить битая картинка или не битая, или чтоб в случае фейла просто он еррор ресьюм некст...
Спасибо за помощь.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: LoadPicture и битые картинки

Сообщение Debugger » 25.03.2011 (Пт) 13:40

Ты лучше бы не код, а пример "битой" картинки сбросил.
В принципе, если и вправду файл недокачан, то VB6 может не загрузить его.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: LoadPicture и битые картинки

Сообщение Хакер » 25.03.2011 (Пт) 13:42

Floyd писал(а):Ума не приложу, как попытаться проверить битая картинка или не битая, или чтоб в случае фейла просто он еррор ресьюм некст...

tag_warning(1)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 25.03.2011 (Пт) 13:57

картинка в аттаче. в винде она смотрится у меня с серой полосой снизу.
пытаюсь гуглить tag_warning(1) - не вижу вменяемого объяснения как этим пользоваться.
подскажите, если не лень.
спасибо.
Вложения
RIA11-890353_286.jpg
RIA11-890353_286.jpg (36 Кб) Просмотров: 10515

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: LoadPicture и битые картинки

Сообщение Antonariy » 25.03.2011 (Пт) 16:55

Floyd писал(а):пытаюсь гуглить tag_warning(1) - не вижу вменяемого объяснения как этим пользоваться.
подскажите, если не лень.
Это нашему главному что-то не понравилось в отмеченной фразе, а дать ссылку на пункт правил он не удосужился.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: LoadPicture и битые картинки

Сообщение Хакер » 25.03.2011 (Пт) 16:59

Понятное дело что: ярко выраженный непрофессионализм в разделе «для профессионалов». Пункты видно если зайти в указанный раздел.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 25.03.2011 (Пт) 17:39

согласен, ошибся. причем, правила читал и понимал, что делаю.
еще раз, извините.
сможете помочь?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: LoadPicture и битые картинки

Сообщение iGrok » 25.03.2011 (Пт) 20:05

Floyd писал(а):сможете помочь?

Ну вообще, лично у меня при попытке загрузить эту картинку вылезает "Run-time error 481: Invalid picture", которая нормально перехватывается при помощи On Error.

Может, у тебя из-за чего-то другого вылетает?
label:
cli
jmp label

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 25.03.2011 (Пт) 20:13

да в том и дело, что он еррор у меня стоит,
при запуске через ВБ нормально ловлю эту ошибку и помечаю фото как битое.
но когда компилю прогу в ехе - на loadpicture происходит закрытие программы с ошибкой,
не доходя даже, считай, до отлова ошибки 481. причем, закрытие происходит не всегда.
раз на 4й-5й прога отрабатывает нормально.
не пойму, от чего это зависит. проц не грузит, памяти не нажирает, проверял...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: LoadPicture и битые картинки

Сообщение iGrok » 25.03.2011 (Пт) 21:51

Ну.. Учись искать ошибки. :)
Пробуй комментировать разные части кода, компилировать без них и запускать. Или попробуй писать лог выполнения, и смотри по нему, в каком месте происходит крах.

По имеющемся данным сказать вообще ничего нельзя. У меня эта ошибка нормально ловится как в IDE, так и в скомпилированном виде.
Если не ставить обработчик, в скомпилированном виде вылетает не "Программа будет закрыта", а почти такое же сообщение про Runtime error 481, после чего программа закрывается.

Скорей всего, дело вообще не в LoadPicture и битой картинке. Попробуй заменить LoadPicture на любую другую заведомо ошибочную операцию, например
Код: Выделить всё
Dim b as Long
b = 100 / 0

И посмотри, что получится..
label:
cli
jmp label

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: LoadPicture и битые картинки

Сообщение Antonariy » 25.03.2011 (Пт) 23:02

Хакер писал(а):Понятное дело что: ярко выраженный непрофессионализм в разделе «для профессионалов». Пункты видно если зайти в указанный раздел.

Ну я-то тему впервые увидел только в этом разделе. Обычно о переносах пишут в самой теме.
Лучший способ понять что-то самому — объяснить это другому.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 28.03.2011 (Пн) 12:48

iGrok писал(а):Ну.. Учись искать ошибки. :)
Пробуй комментировать разные части кода, компилировать без них и запускать. Или попробуй писать лог выполнения, и смотри по нему, в каком месте происходит крах.

это уже сделано. LoadPicture.


iGrok писал(а):Скорей всего, дело вообще не в LoadPicture и битой картинке. Попробуй заменить LoadPicture на любую другую заведомо ошибочную операцию, например
Код: Выделить всё
Dim b as Long
b = 100 / 0

И посмотри, что получится..

сделал вместо LoadPicture 100/0.
абсолютно нормально из-под ехе-шника отлавливаю 481 ошибку и прога работает дальше.

еще раз:
косяк есть в LoadPicture.
по сему надо найти способ оценки картинок, как битые.
кто что подскажет?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: LoadPicture и битые картинки

Сообщение Хакер » 28.03.2011 (Пн) 12:59

Floyd писал(а):по сему надо найти способ оценки картинок, как битые.
кто что подскажет?

Какие тут могут быть вопросы? Нужно мыслить я не знаю как, чтобы не сообразить читать файл, читать структуры в нём, проверять соответствие JFIF-формату на каждом шаге и кричать о несоответствии. Ещё можно извратиться и до того, чтобы свой SEH-хендлер повешать над вызовом LoadPicture.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 28.03.2011 (Пн) 14:34

SEH-хендлер это интересно...
раз более простого варианта нет - будем делать сложный.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: LoadPicture и битые картинки

Сообщение Хакер » 28.03.2011 (Пн) 14:36

Самый простой это с проверкой файла.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 28.03.2011 (Пн) 15:16

Хакер писал(а):Самый простой это с проверкой файла.

да, но вот не знаю на что проверять.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: LoadPicture и битые картинки

Сообщение Хакер » 28.03.2011 (Пн) 15:17

Floyd писал(а):да, но вот не знаю на что проверять.

На соответствие JFIF-формату :roll:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 28.03.2011 (Пн) 16:50

ясно. проблема не решима. просьба закрыть тему.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: LoadPicture и битые картинки

Сообщение Хакер » 28.03.2011 (Пн) 16:53

Проблема решима.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: LoadPicture и битые картинки

Сообщение Debugger » 28.03.2011 (Пн) 17:45

На его уровне - не решима.
Попробуй найти в Интернета обновление VB6. Старые версии грешат непонятными глюками. Возможно, это один из них.
А может, ты где-то дальше используешь небезопасные функции, которые ведут к краху программы. Тут виноват ты.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: LoadPicture и битые картинки

Сообщение Mikle » 30.03.2011 (Ср) 9:22

Floyd писал(а):ясно. проблема не решима.

Мне кажется, компилируя в EXE, ту отметил дополнительные опции оптимизации, которые отключают отслеживание ошибки.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 28.04.2011 (Чт) 15:36

Debugger писал(а):На его уровне - не решима.

мне кажется более корректной фраза "затраты на решение проблемы не разумны".

Debugger писал(а):А может, ты где-то дальше используешь небезопасные функции, которые ведут к краху программы. Тут виноват ты.

еще раз повторю, падает на LoadPicture, это достоверно.

Floyd
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 23.04.2009 (Чт) 10:50

Re: LoadPicture и битые картинки

Сообщение Floyd » 28.04.2011 (Чт) 15:37

Mikle писал(а):
Floyd писал(а):ясно. проблема не решима.

Мне кажется, компилируя в EXE, ту отметил дополнительные опции оптимизации, которые отключают отслеживание ошибки.

нет, это включено. в других местах кода это используется и успешно.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: LoadPicture и битые картинки

Сообщение Mikle » 28.04.2011 (Чт) 20:55

А можно проверить - оставить в коде ТОЛЬКО загрузку картинки, если по-прежнему будет падать - выложить сюда код с той картинкой?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: LoadPicture и битые картинки

Сообщение BV » 05.05.2011 (Чт) 13:08

Floyd, замени LoadPicture на GDI+-аналог GdipLoadImageFromFile, если затраты настолько критичны.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: LoadPicture и битые картинки

Сообщение sosed213 » 28.01.2016 (Чт) 14:49

Так же как и автор темы, столкнулся с такой бедой.

Потребовалась перебрать пачку JPG файлов (порядка 5000), как раз на предмет выявления "битых" файлов.
Некоторые файлы "корректно" вызывают ошибку, которую могу отловить и сделать исключение, а на некоторых файлах просто зависает программа.

Как бы если загрузить Jpg через API (GDI Plus), то грузит нормально, но с серой полосой.

Как бы это побороть (отловить битый файл)?!
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: LoadPicture и битые картинки

Сообщение sosed213 » 28.01.2016 (Чт) 19:29

Есть (глупое) решение: использовать 2 программы. Одна (ведущая) контролирует другую (ведомую). Ведомая должна сказать смогла она прочитать файл, или нет (LoadPicture). Если ведомая зависла более чем на 5 сек. то основная (ведущая) прибить ее, и помечает файл как 100% битый.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: LoadPicture и битые картинки

Сообщение Хакер » 28.01.2016 (Чт) 19:30

Решение глупое.

Правильное решение состоит в том, чтобы самому анализировать файл.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: LoadPicture и битые картинки

Сообщение sosed213 » 28.01.2016 (Чт) 19:40

Согласен. Но нужно было либо придумать что то за 15 минут, либо пока вовсе не заниматься.

А по работе с графикой, особенно по анализу jpg-файла, у меня совсем туго.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: LoadPicture и битые картинки

Сообщение sosed213 » 28.01.2016 (Чт) 19:55

Пару месяцев назад, когда была аналогичная задача, вышел из ситуация Linux-утилитой, и как выяснилось подобных программ очень мало.


Кстати, может кому и пригодится (Linux-команда, поиск поврежденных Jpg-файлов):
Код: Выделить всё
find -iname "*.jpg" -print0 | xargs -0 jpeginfo -c | grep -e WARNING -e ERROR | sed -e 's/\(.*\.[jJ][pP][eE]\?[gG]\)\s\+[0-9]\+\s\+.*$/\1/' > find.log
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

    TopList