Fórum Firemonkey TBitmap em TBytes TakePhotoFromCameraAction1DidFinishTaking #608761
23/03/2020
0
Tenho uma função que envia arquivos para o AWS S3
preciso pegar a imagem capturada no TakePhotoFromCameraAction1DidFinishTaking e transformar em Byte para enviar mais não sei por onde começar.
function TF_Cadsuspeito.UploadFile(pFile: TBytes; FileName, Bucket: string): boolean;
var
Service: TAmazonStorageService;
ConAmazon: TAmazonConnectionInfo;
begin
try
ConAmazon := TAmazonConnectionInfo.Create(nil);
ConAmazon.AccountKey := SecretKey;
ConAmazon.AccountName := AccessKey;
ConAmazon.QueueEndpoint := 'queue.amazonaws.com';
ConAmazon.StorageEndpoint := 's3-us-east-1.amazonaws.com';
ConAmazon.TableEndpoint := 'sdb.amazonaws.com';
ConAmazon.UseDefaultEndpoints := False;
Service := TAmazonStorageService.Create(ConAmazon);
Result := Service.UploadObject(Bucket, FileName, pFile, TRUE, nil, nil, amzbaPrivate, nil);
finally
ConAmazon.Free;
Service.Free;
end;
end;
preciso pegar a imagem capturada no TakePhotoFromCameraAction1DidFinishTaking e transformar em Byte para enviar mais não sei por onde começar.
function TF_Cadsuspeito.UploadFile(pFile: TBytes; FileName, Bucket: string): boolean;
var
Service: TAmazonStorageService;
ConAmazon: TAmazonConnectionInfo;
begin
try
ConAmazon := TAmazonConnectionInfo.Create(nil);
ConAmazon.AccountKey := SecretKey;
ConAmazon.AccountName := AccessKey;
ConAmazon.QueueEndpoint := 'queue.amazonaws.com';
ConAmazon.StorageEndpoint := 's3-us-east-1.amazonaws.com';
ConAmazon.TableEndpoint := 'sdb.amazonaws.com';
ConAmazon.UseDefaultEndpoints := False;
Service := TAmazonStorageService.Create(ConAmazon);
Result := Service.UploadObject(Bucket, FileName, pFile, TRUE, nil, nil, amzbaPrivate, nil);
finally
ConAmazon.Free;
Service.Free;
end;
end;

Inarais Jerônimo
Curtir tópico
+ 0
Responder
Posts
24/03/2020
Inarais Jerônimo
Tenho uma função que envia arquivos para o AWS S3
preciso pegar a imagem capturada no TakePhotoFromCameraAction1DidFinishTaking e transformar em Byte para enviar mais não sei por onde começar.
function TF_Cadsuspeito.UploadFile(pFile: TBytes; FileName, Bucket: string): boolean;
var
Service: TAmazonStorageService;
ConAmazon: TAmazonConnectionInfo;
begin
try
ConAmazon := TAmazonConnectionInfo.Create(nil);
ConAmazon.AccountKey := SecretKey;
ConAmazon.AccountName := AccessKey;
ConAmazon.QueueEndpoint := 'queue.amazonaws.com';
ConAmazon.StorageEndpoint := 's3-us-east-1.amazonaws.com';
ConAmazon.TableEndpoint := 'sdb.amazonaws.com';
ConAmazon.UseDefaultEndpoints := False;
Service := TAmazonStorageService.Create(ConAmazon);
Result := Service.UploadObject(Bucket, FileName, pFile, TRUE, nil, nil, amzbaPrivate, nil);
finally
ConAmazon.Free;
Service.Free;
end;
end;
preciso pegar a imagem capturada no TakePhotoFromCameraAction1DidFinishTaking e transformar em Byte para enviar mais não sei por onde começar.
function TF_Cadsuspeito.UploadFile(pFile: TBytes; FileName, Bucket: string): boolean;
var
Service: TAmazonStorageService;
ConAmazon: TAmazonConnectionInfo;
begin
try
ConAmazon := TAmazonConnectionInfo.Create(nil);
ConAmazon.AccountKey := SecretKey;
ConAmazon.AccountName := AccessKey;
ConAmazon.QueueEndpoint := 'queue.amazonaws.com';
ConAmazon.StorageEndpoint := 's3-us-east-1.amazonaws.com';
ConAmazon.TableEndpoint := 'sdb.amazonaws.com';
ConAmazon.UseDefaultEndpoints := False;
Service := TAmazonStorageService.Create(ConAmazon);
Result := Service.UploadObject(Bucket, FileName, pFile, TRUE, nil, nil, amzbaPrivate, nil);
finally
ConAmazon.Free;
Service.Free;
end;
end;
A solução foi criar um memorystream do Tbitmap isso pode ser feito de duas formas:
1 | Bitmap . SaveToStream(Image_Stream); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | procedure BitmapToStream( aBitmap: TBitmap; aStream: TStream ); var MS: TMemoryStream; S: int32; begin MS := TMemoryStream . Create; try aBitmap . SaveToStream(MS); MS . Position := 0 ; if MS . Size>MaxInt then begin raise Exception . Create( 'TSpriteSheet.BitmapToStream: Image data too large.' ); end ; S := MS . Size; aStream . Write (S,Sizeof(S)); MS . SaveToStream(aStream); finally MS . Free; end ; end ; |
ao final minha rotina ficou assim
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | procedure BitmapToStream( aBitmap: TBitmap; aStream: TStream ); var MS: TMemoryStream; S: int32; begin MS := TMemoryStream . Create; try aBitmap . SaveToStream(MS); MS . Position := 0 ; if MS . Size>MaxInt then begin raise Exception . Create( 'TSpriteSheet.BitmapToStream: Image data too large.' ); end ; S := MS . Size; aStream . Write (S,Sizeof(S)); MS . SaveToStream(aStream); finally MS . Free; end ; end ; procedure UploadImage(); var // ConAmazon: TAmazonConnectionInfo; Service: TAmazonStorageService; regions:TAmazonRegion; Response: TCloudResponseInfo; Image_Byte: TBytes; Image_Stream: TMemoryStream; bResult : Boolean ; begin try Image_Stream:= TMemoryStream . Create; //Form1.Image1.MultiResBitmap.Items[0].Bitmap.SaveToStream(Image_Stream); //Image_Stream:= TFileStream.Create('C:\\Users\\sinho\\OneDrive\\Imagens\\teste.jpg', 0); BitmapToStream(Form1 . Image1 . MultiResBitmap . Items[ 0 ].Bitmap,Image_Stream); SetLength(Image_Byte, Image_Stream . Size); Image_Stream . Position := 0 ; Image_Stream . Read(Image_Byte, Image_Stream . Size ); Form1 . ConAmazon := TAmazonConnectionInfo . Create( nil ); Form1 . ConAmazon . AccountKey := 'LRxxxxxxxxxxxxxxxxxxxx' ; Form1 . ConAmazon . AccountName := 'AKIxxxxxxxxxxxxxxxxx' ; Form1 . ConAmazon . Region:= TAmazonRegion . amzrUSEast1 ; Form1 . ConAmazon . QueueEndpoint := 'queue.amazonaws.com' ; Form1 . ConAmazon . TableEndpoint := 'sdb.amazonaws.com' ; Service := TAmazonStorageService . Create(Form1 . ConAmazon); Response := TCloudResponseInfo . Create; bResult:= Service . UploadObject( 'romobr' , 'teste.jpg' , Image_Byte, False , nil , nil , amzbaPrivate, Response, regions); if bResult = True then ShowMessage( 'Upload success' +# 13 +IntToStr(Response . StatusCode)+ ' -> ' + Response . StatusMessage) else ShowMessage( 'Upload fails' +# 13 +IntToStr(Response . StatusCode)+ ' -> ' + Response . StatusMessage) Finally Image_Stream . Free; Service . Free; Form1 . ConAmazon . Free; end ; end ; |
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)