![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |