• 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;

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

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


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

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

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу