Firemonkey TBitmap em TBytes TakePhotoFromCameraAction1DidFinishTaking
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
Curtidas 0
Respostas
Inarais Jerônimo
23/03/2020
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:
Bitmap.SaveToStream(Image_Stream);
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
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;
GOSTEI 0