|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблемы при передаче изображения
Кто знает, "почему кода я передаю изображение из объекта "Image" от "серверной программы" на "клиентскую" в объект "Image" или на оборот, в ответ приходит не само изображение а чёрный квадрат"?
Вот исходный код: Код:
//Сегмент программного кода для отправки данных в потоке: var MemoryStream: TMemoryStream; //Переменная потока памяти begin MemoryStream := TMemoryStream.Create; //Создаём поток try MemoryStream.Position := 0; //Число байт от начала и конца потока Image1.Picture.BitMap.SaveToStream(MemoryStream); //Заносим данные в поток MemoryStream.Position := 0; //Число байт от начала и конца потока Socket.SendStreamThenDrop(MemoryStream); //Отправка данных except MemoryStream.Free; //Очистка потока end; end; //Сегмент программного кода для принятия данных из потока: const MAX_BUF_SIZE = $4095; //Константа буффера var Int: Integer; //Переменная интервала MemoryStream: TMemoryStream; //Переменная потока памяти Buffer: array [0..MAX_BUF_SIZE] of Char; //Переменная буффера begin Int := Socket.ReceiveLength; //Устанавливаем длину потока в байтах MemoryStream := TMemoryStream.Create; //Создаём поток try MemoryStream.Position := 0; //Число байт от начала и конца потока Socket.ReceiveBuf(Buffer, Int); //Принимаем данные в буффер MemoryStream.WriteBuffer(Buffer, Int); //Записываем поток в буффер MemoryStream.Position := 0; //Число байт от начала и конца потока Image1.Picture.BitMap.LoadFromStream(MemoryStream); //Загружаем полученные данные except MemoryStream.Free; //Очистка потока end; end; |
#2
|
|||
|
|||
в конце приема изображения сделай так:
Код:
Image1.Picture.Graphic := Image1.Picture.BitMap; |
#3
|
|||
|
|||
Уважаемый "Imikle", я попробовал то что вы мне посоветовали вот пример:
Код:
//Сегмент программного кода для отправки данных в потоке: var MemoryStream: TMemoryStream; //Переменная потока памяти begin MemoryStream := TMemoryStream.Create; //Создаём поток try MemoryStream.Position := 0; //Число байт от начала и конца потока Image1.Picture.BitMap.SaveToStream(MemoryStream); //Заносим данные в поток MemoryStream.Position := 0; //Число байт от начала и конца потока Socket.SendStreamThenDrop(MemoryStream); //Отправка данных except MemoryStream.Free; //Очистка потока end; end; //Сегмент программного кода для принятия данных из потока: const MAX_BUF_SIZE = $4095; //Константа буффера var Int: Integer; //Переменная интервала MemoryStream: TMemoryStream; //Переменная потока памяти Buffer: array [0..MAX_BUF_SIZE] of Char; //Переменная буффера begin Int := Socket.ReceiveLength; //Устанавливаем длину потока в байтах MemoryStream := TMemoryStream.Create; //Создаём поток try MemoryStream.Position := 0; //Число байт от начала и конца потока Socket.ReceiveBuf(Buffer, Int); //Принимаем данные в буффер MemoryStream.WriteBuffer(Buffer, Int); //Записываем поток в буффер MemoryStream.Position := 0; //Число байт от начала и конца потока Image1.Picture.BitMap.LoadFromStream(MemoryStream); //Загружаем полученные данные Image1.Picture.Graphic := Image1.Picture.BitMap; //Данная строка по всему видимо не чего видимого не делает... except MemoryStream.Free; //Очистка потока end; end; Но, не к чему плохому или хорошему не привело. Проще говоря всё осталось без изменений... P.S: Вообще по идеи изображение передаётся, но меньше чем на половину. Проще говоря, пол верхняя часть изображения заретуширована чёрным цветов, а нижняя отображается нормально. Я вообще не чего не понимаю, в чём ошибка или проблема. Последний раз редактировалось Midmal, 13.01.2010 в 12:12. |