Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Вывести JFIF (JPEG из интернета) на экран


Автор: Snowy 25.9.2006, 12:05
// Тема Ibragim

Цитата

День добрый. 
Есть 
Код

Pict: TStream;

в которой хранится рисунок в формате JFIF, выглядит вот так (начало)
Код

......JFIF.....H.H.....ACopyright (c) 2004 by Yahoo! Incorporated. All Rights Reserved....C..............
..
................. $.' ",#..(7),01444.' и так далее

Как бы его показать на экране, то есть "засунуть" в 
Код

Image1: TImage;

Благодарю за внимание, жду советов. 

--------------------------------------------------------------------------

Image1.Picture.LoadFromStream ?

Автор: Alexeis 25.9.2006, 12:20
вот так точно работает
Код

uses
   jpeg;

procedure TForm1.FormCreate(Sender: TObject);
var
 f : TFileStream;
 j : TJpegImage;
begin
  f := TFileStream.Create('F:\Share\2.jpg', fmOpenRead);
  j := TJpegImage.Create;
  j.LoadFromStream(f);
  img1.Picture.Assign(j);
  j.Free;
  f.Free;
end;


В данном случае поток файловый, но он может быть любым.

Автор: Ibragim 25.9.2006, 17:24
Эхххх... Пишет "TStream.Seek not implemented" и вылетает...


Код

var
  Pict: TStream;
  j: TJPEGImage;

...
Код

  Pict := TStream.Create;
// Здесь наполнение Pict данными
  j := TJPEGImage.Create;
  j.LoadFromStream(Pict);
  Image1.Picture.Assign(j);

Автор: Alexeis 25.9.2006, 17:37
Ibragim, это очень плохо, значит поток не полноценный, тогда лучше скопировать все его содержимое в промежуточный TMemoryStream, a из него уже в жпег.

Автор: Snowy 25.9.2006, 17:44
Цитата(Ibragim @  25.9.2006,  17:24 Найти цитируемый пост)
Pict := TStream.Create;
Нельзя создавать объект абстрактного класса.
Может ты имел ввиду TMemoryStream?

Автор: Ibragim 25.9.2006, 17:55
C TMemoryStream пишет  Jpeg Error #42 на операции Image1.Picture.Assign(j);

Вполне возможно, что проблема в формате JFIF, это все таки не JPeg, вот и не понимает.... Но как побороть, не представляю...

Автор: Snowy 25.9.2006, 19:45
Код

  j := TJPEGImage.Create;
  Pict.Position := 0;
  j.LoadFromStream(Pict);
  Image1.Picture := j;
  j.Free;

Автор: Ibragim 25.9.2006, 19:57
Прикольно, ошибка поменялась на Jpeg Error #53 smile , по варианту Snowy.

Ладно, спасибо большое отозвавшимся, похоже это нельзя решить удаленно - вы ж не телепаты. Буду дальше копать.

Автор: Snowy 25.9.2006, 20:13
Дай файл - покопаем локально smile

Автор: Alexeis 26.9.2006, 14:18
Странно, TcpClient1.ReadStream() - показывает, что такого метода не существует.
Это что наследник TcpClient1 разве не объект класса TcpClient?

Автор: Ibragim 26.9.2006, 14:25
Нет, это 
Код

   TcpClient1: TIdTCPClient;
- TCP клиент с закладки Indy

Автор: Alexeis 26.9.2006, 19:31
Вопрос на самом деле двойственный. 
Если вы согласны, то я разделю тему на две части, одну из которых перенесу в сети (правда еще ни разу этого не делал  smile )



Автор: Snowy 26.9.2006, 20:39
А ты сохрани стрим в файл, а картинку браузером. и сравни эти 2 файла.

Цитата(alexeis1 @  26.9.2006,  19:31 Найти цитируемый пост)
Если вы согласны, то я разделю тему на две части, одну из которых перенесу в сети
Давно пора.
А то уже совсем другой вопрос обсуждаем.

Цитата(alexeis1 @  26.9.2006,  19:31 Найти цитируемый пост)
правда еще ни разу этого не делал
При разделении отмечай галками посты, которые выделить и дай новому топу имя.
Там ничего сложного - тренируйся.

Автор: Alexeis 26.9.2006, 20:58
Модератор: Часть темы перенесено в раздел СDelphi: Сети

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)