Перейти к содержанию
Fire Monkey от А до Я
  • 0

TImage в Base64


ZverA4

Вопрос

Подскажите плиз, как закодировать TImage в Base64 для передачи серверу?

Я делаю так:

    TStream *UserJPGS = new TStream;
    BmpTmpUser->Canvas->Bitmap->SaveToStream(UserJPGS);

    String sResult = "";

   sResult =  BytesToBase64(UserJPGS); //Ошибка тут


     DataUserReg->Add("photoreg="+sResult); //В POST улетело

    delete UserJPGS;

 

Содержимое BytesToBase64

String __fastcall BytesToBase64(TStream ArrayIn)
{
    TBase64Encoding *Encoding = new TBase64Encoding( 64, '\n' );
    String Result;
    Encoding-> Encode(ArrayIn, Result);
    delete Encoding;
    return Result;
}

 

Ругается:

Цитата

[bccaarm Error] odarom.cpp(626): no viable conversion from 'System::Classes::TStream __borland_class *__strong' to 'System::Classes::TStream'
  System.Classes.hpp(1269): candidate constructor (the implicit copy constructor) not viable: no known conversion from 'System::Classes::TStream __borland_class *__strong' to 'const System::Classes::TStream &' for 1st argument; dereference the argument with *
  odarom.h(154): passing argument to parameter 'ArrayIn' here

 

Изменено пользователем Andrey Efimov
Добавил теги для кода и ошибок
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
{$IFDEF ANDROID}
function Encode_Stream( AStream: TStream ): string;
var
  LStream: TMemoryStream;
begin
  AStream.Position:= 0;
  LStream := TMemoryStream.Create;
  TNetEncoding.Base64.Encode( AStream, LStream );
  LStream.Position := 0;
  Result := ReadStringFromStream(LStream, -1, IndyTextEncoding_8Bit);
end;

function Decode_Stream( enc_str: string ): TMemoryStream;
var
  LStream: TStringStream;
begin
  Result:= TMemoryStream.Create;
  LStream:= TStringStream.Create;
  LStream.WriteString( enc_str );
  LStream.Position:= 0;
  TNetEncoding.Base64.Decode( LStream, Result );
end;
{$ELSE}
function Encode_Stream(AStream: TStream): string;
begin
  AStream.Position:= 0;
  Result:= TIdEncoderMIME.EncodeStream(AStream);
end;

function Decode_Stream(enc_str: string): TMemoryStream;
begin
  Result:= TMemoryStream.Create;
  TIdDecoderMIME.DecodeStream(enc_str, Result);
end;
{$ENDIF}

function LoadBitmapFromStream(const AStream: TStream; const Bitmap: TBitmap): Boolean;
var
  Bmp: TBitmapSurface;
begin
  Result := False;
  Bmp := TBitmapSurface.Create;
  try
    Bmp.Assign(Bitmap);
    Result := TBitmapCodecManager.LoadFromStream(AStream, Bmp);
    Bitmap.Assign(Bmp);
  finally
    FreeAndNil(Bmp);
  end;
end;

function SaveBitmapToStream(const AStream: TStream; const Bitmap: TBitmap; const Extension: string;
  SaveParams: PBitmapCodecSaveParams = nil): Boolean;
var
  surf: TBitmapSurface;
begin
  Result := False;
  surf := TBitmapSurface.Create;
  surf.Assign(Bitmap);
  try
    Result := TBitmapCodecManager.SaveToStream(AStream, surf, Extension, SaveParams);
  finally
    surf.Free;
  end;
end;

function Bitmap_To_Base64(bmp: TBitmap; const AQuality: Integer = 85): string;
var
  eStream: TMemoryStream;
  SaveParams: TBitmapCodecSaveParams;
begin
  eStream:= TMemoryStream.Create;
  SaveParams.Quality := AQuality;
  SaveBitmapToStream(eStream, bmp, '.jpg', @SaveParams);
  Result:= Encode_Stream(eStream);
  eStream.Free;
end;

function Bitmap_From_Base64(b64_string: string): TBitmap;
var
  eStream: TMemoryStream;
begin
  Result := TBitmap.Create;
  eStream := Decode_Stream(b64_string);
  if Assigned(eStream) then
  try
    eStream.Position := 0;
    LoadBitmapFromStream(eStream, Result);
  finally
    eStream.free;
  end;
end;

Скинул как есть. На цэ желания переводить нет, так-что смотрите сами... Надеюсь разберетесь

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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