• 0
ZverA4

TImage в Base64

Вопрос

Подскажите плиз, как закодировать 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
Добавил теги для кода и ошибок

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


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

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

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

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

Andrey Efimov, noisy, Kitty и 1 другому понравилось это

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

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