Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.01.2010, 08:13
Midmal Midmal вне форума
Прохожий
 
Регистрация: 22.08.2009
Сообщения: 41
Репутация: 10
Вопрос Проблемы при передаче изображения

Кто знает, "почему кода я передаю изображение из объекта "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  
Старый 12.01.2010, 16:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,038
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

в конце приема изображения сделай так:
Код:
Image1.Picture.Graphic := Image1.Picture.BitMap;
Ответить с цитированием
  #3  
Старый 13.01.2010, 12:05
Midmal Midmal вне форума
Прохожий
 
Регистрация: 22.08.2009
Сообщения: 41
Репутация: 10
По умолчанию

Уважаемый "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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter