• 0
Rusland

Bitmap из MemoryStream

Вопрос

Перекодирую картнику из текста в MemoryStream

uses   Soap.EncdDecd;                          // DecodeStream

function TFrmMain.GetImgFromTxt(sPic:String):TMemoryStream;
var
  xInSs: TStringStream;
  xOutMs:TMemoryStream;
begin
  if (sPic<>'') then
  begin
    xInSs:=TStringStream.Create(sPic);  //jpg в baze64 из txt
    xOutMs:=TMemoryStream.Create;
    DecodeStream(xInSs,xOutMs);
    XOutMs.Position:=0;
    Result:=XOutMs;
    xInSs.Free;
    xOutMs.Free;
  end;
end;

Затем присваиваю

  if (Pict1<>'') then
  begin
    Image1.Bitmap.LoadFromStream(GetImgFromTxt(Pict1));
    Image1.Visible:=true;
  end
  else
  begin    
    Image1.Visible:=false;
  end;

Так вот в LoadFromStream приходит nil.

Если я комментирую // xOutMs.Free; то картинка нормально отображается.

Почему такое происходит? Как тогда правильно очищать переменную xOutMs?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3 ответа на этот вопрос

  • 0

 

4 минуты назад, Rusland сказал:

Result:=XOutMs; ---> xOutMs.Free;

мы возвращаем вызывающей процедуре ссылку на уже разрушенный объект ???

Pax Beach и Равиль Зарипов (ZuBy) понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Мне думается что я копирую объект, а не передаю ссылку. Разве нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 минуты назад, Rusland сказал:

Мне думается что я копирую объект, а не передаю ссылку. Разве нет?

копируются данные через Assign или CopyFrom

Rusland и Pax Beach понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу