Fórum Uso do TBitmap Delphi XE8 #525287
09/07/2015
0
Amigos,
Ajuda, por favor...
Alguém poderia me dizer onde esta o erro desse código?
procedure TForm1.Button3Click(Sender: TObject);
Var
B : TBitmap;
begin
B := TBitmap.Create(Width, Height);
Self.ContextHandle(B,Rect(0,0,Width,Height));
B.SaveToFile('image');
end;
Ajuda, por favor...
Alguém poderia me dizer onde esta o erro desse código?
procedure TForm1.Button3Click(Sender: TObject);
Var
B : TBitmap;
begin
B := TBitmap.Create(Width, Height);
Self.ContextHandle(B,Rect(0,0,Width,Height));
B.SaveToFile('image');
end;
V.el
Curtir tópico
+ 0
Responder
Post mais votado
10/07/2015
o que ocorre?
- nao compila
- compila mas faz o que vc espera ( oque vc espera que esse comando faça)
- nao compila
- compila mas faz o que vc espera ( oque vc espera que esse comando faça)
Dorivan Sousa
Responder
Gostei + 1
Mais Posts
10/07/2015
V.el
Dorivan,
A proposta é fazer um screenshot utilizando o TBitmap. Mas, pesquisando aqui, consegui resolver em parte. O objetivo principal é o seguinte: O evento OnClick de um TButton fará com que o programa faça um screenshot da tela e, em seguida, o evento OnClick do actiontoolbutton compartilharia a imagem capturada da tela. Consegui fazer, só que agora, quando a tela possui muitos TListBoxItem, o Screenshot só é feito do conteúdo distribuído ao longo do display do celular. Está faltando duas coisas agora:
Primeiro: Fazer com que o evento OnClick de um TButton fizesse um screenshot não somente da tela visualizada no display do celular, e sim, de todo conteúdo naquele form que possui dezenas de TListBoxItem.
Segundo: Salvar o Screenshot na galeria de fotos do dispositivo Android e iOS.
Obs: Se eu colocar o comando "image.SaveToFile('image.png');" abaixo de "image11.Bitmap.Assign(image);" o programa compila, compartilha normalmente, mas, no Android, por exemplo, apresenta a mensagem de erro: "java.io.FileNotFoundException: image.png: open failed: EROFS (Read-only file system) ". Quando eu não uso o comando "image.SaveToFile('image.png');", o programa compila normalmente, compartilha normalmente mas não salva a imagem capturada na galeria de fotos do Android.
Segue abaixo o código:
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.TabControl, FMX.Controls.Presentation, FMX.StdCtrls, System.Actions, FMX.ActnList, FMX.Gestures, FMX.Layouts, FMX.Objects, FMX.Ani, FMX.Colors, FMX.ListBox, FMX.Advertising, FMX.Edit, FMX.ScrollBox, FMX.Memo, FMX.Effects, IniFiles, FMX.Header, FMX.StdActns, FMX.MediaLibrary.Actions;
type
TForm1 = class(TForm)
procedure ActionMakeScreenshotExecute(Sender: TObject);
procedure ShowShareSheetAction1BeforeExecute(Sender: TObject);
procedure TForm1.ActionMakeScreenshotExecute(Sender: TObject);
Var
image : TBitmap;
SourceRect: TRectF;
begin
SourceRect := TRectF.Create(0,0,layout1.Width, layout1.Height);
image := TBitmap.Create (Round (layout1.Width), Round (layout1.Height));
try
if image.Canvas.BeginScene then
try
layout1.PaintTo(image.Canvas, SourceRect);
finally
image.Canvas.EndScene;
end;
image11.Bitmap.Assign(image);
finally
FreeAndNil (image);
end;
end;
procedure TForm1.ShowShareSheetAction1BeforeExecute(Sender: TObject);
begin
ShowShareSheetAction1.Bitmap.Assign(Image11.Bitmap);
end;
A proposta é fazer um screenshot utilizando o TBitmap. Mas, pesquisando aqui, consegui resolver em parte. O objetivo principal é o seguinte: O evento OnClick de um TButton fará com que o programa faça um screenshot da tela e, em seguida, o evento OnClick do actiontoolbutton compartilharia a imagem capturada da tela. Consegui fazer, só que agora, quando a tela possui muitos TListBoxItem, o Screenshot só é feito do conteúdo distribuído ao longo do display do celular. Está faltando duas coisas agora:
Primeiro: Fazer com que o evento OnClick de um TButton fizesse um screenshot não somente da tela visualizada no display do celular, e sim, de todo conteúdo naquele form que possui dezenas de TListBoxItem.
Segundo: Salvar o Screenshot na galeria de fotos do dispositivo Android e iOS.
Obs: Se eu colocar o comando "image.SaveToFile('image.png');" abaixo de "image11.Bitmap.Assign(image);" o programa compila, compartilha normalmente, mas, no Android, por exemplo, apresenta a mensagem de erro: "java.io.FileNotFoundException: image.png: open failed: EROFS (Read-only file system) ". Quando eu não uso o comando "image.SaveToFile('image.png');", o programa compila normalmente, compartilha normalmente mas não salva a imagem capturada na galeria de fotos do Android.
Segue abaixo o código:
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.TabControl, FMX.Controls.Presentation, FMX.StdCtrls, System.Actions, FMX.ActnList, FMX.Gestures, FMX.Layouts, FMX.Objects, FMX.Ani, FMX.Colors, FMX.ListBox, FMX.Advertising, FMX.Edit, FMX.ScrollBox, FMX.Memo, FMX.Effects, IniFiles, FMX.Header, FMX.StdActns, FMX.MediaLibrary.Actions;
type
TForm1 = class(TForm)
procedure ActionMakeScreenshotExecute(Sender: TObject);
procedure ShowShareSheetAction1BeforeExecute(Sender: TObject);
procedure TForm1.ActionMakeScreenshotExecute(Sender: TObject);
Var
image : TBitmap;
SourceRect: TRectF;
begin
SourceRect := TRectF.Create(0,0,layout1.Width, layout1.Height);
image := TBitmap.Create (Round (layout1.Width), Round (layout1.Height));
try
if image.Canvas.BeginScene then
try
layout1.PaintTo(image.Canvas, SourceRect);
finally
image.Canvas.EndScene;
end;
image11.Bitmap.Assign(image);
finally
FreeAndNil (image);
end;
end;
procedure TForm1.ShowShareSheetAction1BeforeExecute(Sender: TObject);
begin
ShowShareSheetAction1.Bitmap.Assign(Image11.Bitmap);
end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)