Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26151
Рейтинг: 2127
#1: 2007-07-02 17:12:43 ЛС | профиль | цитата
Вот что я обнаружил. Отсутствует считывание со стрима в компоненте Jpeg.
Смотрим код чтения стрима doLoadFromStream
procedure THIJpeg._work_doLoadFromStream;
var st:PStream;
begin
st := ReadStream(_data,_data_Stream,nil);
if st <> nil then
{$ifdef gdip}
{$else}
jpg.LoadFromStream(st);
{$endif}
end;
После чтения, st.Position указывает на конец стрима, но метод jpg.LoadFromStream не устанавливает позицию стрима в ноль, читаем а JpegObj
procedure LoadFromStream(Stream: PStream);
{* Loads JPeg image from a stream (from current position). }

те от текущей позиции, и в нашем случае получается что от конца. И пока я не сделал вот так (обнуление позиции в MemoryStream я тоже пробовал -- не помогло)
procedure THIJpeg._work_doLoadFromStream;
var st:PStream;
begin
st := ReadStream(_data,_data_Stream,nil);
st.Position := 0; // вставка
if st <> nil then
{$ifdef gdip}
{$else}
jpg.LoadFromStream(st);
{$endif}
end;
он у меня категорически отказывался читать стрим. Запись в стрим я не пробовал, но надо проверить. Я буду признателен, если специалисты докажут мне обратное.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2007-07-02 17:26:29 ЛС | профиль | цитата
схема эксперимента
карма: 27
0
Ответов: 2125
Рейтинг: 159
#3: 2007-07-02 17:32:58 ЛС | профиль | цитата
Я не делал никаких изменения, схема, как ни странно, работает: code_1621.txt
карма: 1

0
файлы: 1code_1621.txt [694B] [276]
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2007-07-02 17:39:43 ЛС | профиль | цитата
у меня тоже работает
карма: 27
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#5: 2007-07-02 18:01:30 ЛС | профиль | цитата
Dilma, Эта схема у меня тоже работает. А вот посмотрите вот эту. Заранее извиняюсь за применение маленькой базы с картинкой, но мне нужно именно это. Это может пригодиться всем в качестве примера чтения картинок из базы.
карма: 22

0
файлы: 1Read_Picture_From_db.zip [30.7KB] [233]
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2007-07-02 18:07:26 ЛС | профиль | цитата
nesco писал(а):
Заранее извиняюсь

не извиняем. Если учесть, что элементов чтения blob полей в hiasm нет, то на схему даже смотреть не охото, поскольку это 90% ошибка автора => автор мог бы и сам минимизировать пример до демонстрации баги на пяти элементах.
карма: 27
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#7: 2007-07-02 18:27:50 ЛС | профиль | цитата
Dilma, а причем здесь blob вообще? Вы мне причину сказать можете, а не на blob валить, так проще всего отмазаться, типа в пакете этого не предусмотрено. А blob это обычная непрерывная форматированная строка. Хорошо, если на то пошло, то я специально добъюсь этого, но другим путем. Хоршо, если это будет, все же, моя ошибка. Обидно как-то, что так просто и элементарно самоустранились.
карма: 22

0
Ответов: 2125
Рейтинг: 159
#8: 2007-07-02 18:36:56 ЛС | профиль | цитата
1. Если пишешь в MemoryStream логично было бы предположить, что после записи позиция будет в конце потока
2. Поэтому делать doPosition перед чтением просто необходимо.
3. Это не обязан делать ни компонент Jpeg, ни кто-либо другой - это в данном случае твоя забота.
4. Проверку на отсутствие картинки можно и по другому сделать, например сравнить считанное из базы значение с пустой строкой.

[size=-2]------ Добавлено в 18:36
code_1622.txt
карма: 1

0
файлы: 1code_1622.txt [2.1KB] [305]
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2007-07-02 18:41:18 ЛС | профиль | цитата
nesco,

http://dev.hiasm.com/xf/topic.php?t=4450

Прошу заметить, что на высказанную проблему пример привел не автор, а отвечающий. Причем пример, опровергающий заявление об ошибки.

nesco писал(а):
Вы мне причину сказать можете, а не на blob валить, так проще всего отмазаться, типа в пакете этого не предусмотрено.

проще всего отмазаться - это пропустить рекомендации мимо ушей и выкинуть на форум схему из полсотни Кб. И по-моему уже не раз повторялось - по-умолчанию автору по барабану чего там не работает у пользователя. И если пользователь хочет, чтобы это работало он обязан доказать и показать автору, что это не его(пользователя) проблема. Вроде как тут никто не нанимался решать чужие проблемы...
карма: 27
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#10: 2007-07-02 20:42:01 ЛС | профиль | цитата
Мне просто интересно было знать, в чем проблема. Спасибо, что подсказали. Я разобрался. Все нормально заработало. Еще раз убедился, что нельзя бездумно копировать схемы, лучше делать самому

[size=-2]------ Добавлено в 20:42
tsdima, еще раз спасибо, что подсказал, как проверять наличие пустых полей, пригодится.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#11: 2007-07-02 20:45:20 ЛС | профиль | цитата
самое интересное, что даже после таких вот примеров понимание того, что рекомендации не просто так написаны все равно не приходит...
карма: 27
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#12: 2007-07-02 22:59:19 ЛС | профиль | цитата
Dilma, еще раз извиняюсь, но именно на моем примере tsdima указал мне на ошибку ( я позднее обнулял позицию и не совсем правильно читал стрим). Можно подумат, у меня время много есть сидеть ловить ошибки, составляя специальные примеры. Я столкнулся со схемой, где не до конца понял механизм позиционирования стрима, и должен был лепить похожую схему с той же самой ошибкой, параллельно составляя еще пару схем для вытаскивания данных.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#13: 2007-07-03 00:10:42 ЛС | профиль | цитата
nesco писал(а):
Можно подумат, у меня время много есть сидеть ловить ошибки, составляя специальные примеры

Ну да... у разработчиков зато вагон времени, чтобы все примеры пользователей рассматривать и искать в них ошибки
карма: 27
0
Ответов: 2125
Рейтинг: 159
#14: 2007-07-03 10:44:27 ЛС | профиль | цитата
nesco писал(а):
Можно подумат, у меня время много есть сидеть ловить ошибки, составляя специальные примеры

nesco, ты конечно извини, но убедиться в том, что это не твоя ошибка, ты был просто обязан. Иначе надо было создавать тему где-нибудь в "Между делом"...
карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#15: 2007-07-06 02:12:42 ЛС | профиль | цитата
tsdima писал(а):
убедиться в том, что это не твоя ошибка

ты же мне показал, что это моя ошибка, и где она. Мне этого вполне хватило, а в примерах я бы повторял одно и тоже -- одну и ту же ошибку, это -- пустая трата времени. Вот потому я и спросил специалистов.
карма: 22

0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)