Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2016, 20:48   #1
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание OLEObject('ADODB.Stream') загрузить в image

Суть проблемы: из adoStream: OleVariant загрузить данные в image;

Код:
var
  adoStream: OleVariant;
  size: integer;
  Data: PByteArray;
  pic: TJPEGImage;
  tm : TMemoryStream.Create;
begin
  Coinitialize(nil);
  pic:= TJPEGImage.Create;
  tm := TMemoryStream.Create;
  adoStream:= CreateOLEObject('ADODB.Stream'); 
  adoStream.Type:= 1;  // Sets or returns the type of data in a Stream object
  adoStream.Mode:= 3; // Sets or returns the available permissions for modifying data
  adoStream.Open();
  adoStream.Write(WinHttpReq.ResponseBody); //записал картинку из "WinHttpReq", данный кусок кода получения контента данным объектом вырезан, да бы уменьшить код примера.
  adoStream.savetofile('1.jpeg'); //сохранят без проблем а значит стрим не пустой
  // --------------------------  тут что то делаю не так ----------------------------------

     Size := VarArrayHighBound (adoStream, 1) - VarArrayLowBound(adoStream, 1) + 1;
     Data := VarArrayLock(adoStream);
     try
       tm.Position := 0;
       tm.WriteBuffer(Data^, Size);
       tm.Position := 0;
     finally
       VarArrayUnlock(adoStream);
     end;

  // --------------------------
  pic.LoadFromStream(tm);
  Image1.Picture.Assign(pic);
  pic.Free;
  tm.Free;
  CoUninitialize;
end;
Эксперты прошу помощи, ткните носом, что я делаю не так/

Последний раз редактировалось fucil; 23.09.2016 в 21:08.
fucil вне форума Ответить с цитированием
Старый 23.09.2016, 21:31   #2
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
По умолчанию

Проблема решил поменяв шило на мыло, а именно

Код:
  try
    size:= adoStream.Size;
    Buffer := adoStream.Read(size);
    PBuffer:= VarArrayLock(Buffer);
    try
      tm.WriteBuffer(PBuffer^, size);
    finally
      VarArrayUnlock(Buffer);
    end;
  finally
    adoStream:= UnAssigned;
  end;
+ как всегда забыл
Код:
tm.Position:=0;
Всем спасибо за помощь, тему можно закрывать.
fucil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как загрузить картинку из папки в Image c++ Builder Mat Bourn Помощь студентам 3 02.06.2015 11:38
какой stream у image(a) dmitriegorovih Общие вопросы Delphi 4 23.07.2010 21:47
Работа с объектом ADODB.Stream voam Microsoft Office Excel 4 15.12.2009 23:31
Как загрузить в TImage Jpeg image? beemoto Общие вопросы Delphi 2 15.11.2009 14:05
Как загрузить GIF анимацию в Image Ramz Помощь студентам 1 27.04.2007 15:18