Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Stream потоки и кодировка BMP,JPG [D7, WinXP]


Vovanchik ©   (2006-01-17 12:36:00) 

Совсем запутался!!! Тут такое дело:
Не могу организовать процесс передачи картинки и её получение, то есть картинку потоком я отправить могу но преобразовать из потока не получаеться постоянно система ругаеться. Если кто втречался с этой проблемой и знаеет как передать картинку через поток. Процесс передачи происходит от клиента к серверу - допустим через TCP/IP. Хотелось бы организовать все через (Serversocket &  Clientsocket)
Заранее Огромное Спасибо!!!!!


Ботвин Дмитрий   (2006-01-18 14:43:00) [1]

>преобразовать из потока не получаеться постоянно система ругаеться

Это потому что ты про Seek даже не вспомнил при восстановлении, а вообще
в таких случаях хорошо помагает SysErrorMessage(GetLastError) - он как раз
об этом и пишет :-))


Roll_and_Rock   (2006-01-17 18:48:00) [2]

//Вот пример для CBuilder`а. Не проверял.

//----- http://forum.vingrad.ru-----------------------------------------------
Со стороны, откуда посылаем (у нас это клиент), пишем:

TFileStream* str = new TFileStream("M:\\MyFile.jpg",fmOpenRead);
//ИЛИ, если мы работаем без сохранения (тогда не создается файл)
TMemoryStream* str = new TMemoryStream ();
str->Position = 0;
Image1->Picture->Bitmap->SaveToStream(str);
//и, наконец, шлем на сервер битмап
str->Position = 0;
ClientSocket1->Socket->SendStream(str);

Обратите внимание, не забывайте перед каждой операцией с потоком устанавливать позицию в 0!!! Иначе получим не то, что хотелось бы
Ну а со стороны приема (у нас это, соответственно, серверсокет), в событии приема пишем:

int ibLen = ServerSocket1->Socket->ReceiveLength();
char* buf= new char[ibLen+1];
TMemoryStream* str = new TMemoryStream();
str->Position = 0;
ServerSocket1->Socket->ReceiveBuf((void*)buf,ibLen);
str->WriteBuffer((void*)buf,ibLen);
str->Position = 0;
Image1->Picture->Bitmap->LoadFromStream(str);
//или
str->SaveToFile("M:\\MyFile.jpg");

Ну и ессно, как говорит Bigbrother, сделал дело - вызови деструктор! То есть почистить за собой надо, не знаю как в Паскале, но в сях мне надо удалить str и buf.
//----------------------------------------------------------------------------


Vovanchik   (2006-01-17 13:52:00) [3]

Ну хотя бы примерчик скиньте!!!


Digitman   (2006-01-17 12:44:00) [4]


> Если кто втречался с этой проблемой


нет никакой проблемы.
Она , эта проблема, ТОБОЙ надумана.


Наверх

Титульная страница Поиск, карта сайта Написать письмо