Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2013, 23:25   #1
100GRamm
ХРЕНЕЮ с ИНДИ
Пользователь
 
Аватар для 100GRamm
 
Регистрация: 08.02.2009
Сообщений: 92
По умолчанию

Доброго времени!
Никак не могу понять почему возникает ошибка (точнее Вин7 совсем закрывает прогу)
Делаю следущее:
Код:
  BTM:=TBitmap.Create;
  MS1:=TMemoryStream.Create;
  MS1.LoadFromFile(f);      // в файл до этого записал несколько БМП, но не с начала
  MS1.Position:=zer;     // начало данных 
  MS1.ReadBuffer (BTM,ie+zer);  //  тут прога мрет
ie - длина блока
до этого с TMemoryStream не работал, хочу разобраться
Код:
BTM:=TBitmap.Create;
  MS1:=TMemoryStream.Create;
  MS2:=TMemoryStream.Create;
  MS1.LoadFromFile(f);
  MS1.Position:=zer;
  MS2.Position:=0;
  MS2.CopyFrom(MS1, ie);
  BTM.LoadFromStream(MS2);
А так всё прходит гладко, но в итоге в BTM ничего нет
Велкам! :D http://radiomedtech.ucoz.ru

Последний раз редактировалось Stilet; 31.03.2013 в 12:23.
100GRamm вне форума Ответить с цитированием
Старый 31.03.2013, 00:42   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Попробуйте:
Код:
BTM:=TBitmap.Create;
MS1:=TMemoryStream.Create;
MS2:=TMemoryStream.Create;
MS1.LoadFromFile(f);
MS1.Position:=zer;
MS2.Position:=0;
MS2.CopyFrom(MS1, ie);
MS2.Position:=0;
BTM.LoadFromStream(MS2);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.03.2013, 00:45   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не надо ничего копировать, TBitmap сам прочтет столько байт, сколько надо, лишь покажите ему откуда читать(через Position)
+ ТС, добавьте обработку ошибок + пользуйтесь отладкой чтоб знать, что и почему сдохло.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.03.2013, 08:40   #4
100GRamm
ХРЕНЕЮ с ИНДИ
Пользователь
 
Аватар для 100GRamm
 
Регистрация: 08.02.2009
Сообщений: 92
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Попробуйте:
Код:
BTM:=TBitmap.Create;
MS1:=TMemoryStream.Create;
MS2:=TMemoryStream.Create;
MS1.LoadFromFile(f);
MS1.Position:=zer;
MS2.Position:=0;
MS2.CopyFrom(MS1, ie);
>>>>>MS2.Position:=0;
BTM.LoadFromStream(MS2);
Да, спасибо, я так и сделал вчера. Всё работает. Пытался читать с конца потока. Просто с толку сбила

MS2.savetofile(ff); >> она работала без смены позиции, потому сразу не понял. Спасибо за участие.



Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
не надо ничего копировать, TBitmap сам прочтет столько байт, сколько надо, лишь покажите ему откуда читать(через Position)
+ ТС, добавьте обработку ошибок + пользуйтесь отладкой чтоб знать, что и почему сдохло.
То есть Битмап сам (по структуре) определит конец картинки? классно , надо попробовать.
Велкам! :D http://radiomedtech.ucoz.ru

Последний раз редактировалось Stilet; 31.03.2013 в 12:25.
100GRamm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TMemoryStream Volkogriz Общие вопросы Delphi 2 09.01.2013 12:55
string, TMemoryStream, TBitmap и я xrob Свободное общение 5 20.05.2011 09:01
Считать из файла несколько массивов pascalC Общие вопросы C/C++ 13 20.10.2008 21:16
Требуется программным путём считать несколько ключей с реестра из одного раздела. Air Общие вопросы Delphi 6 11.09.2008 11:33