gpt4 book ai didi

delphi - VCL.位图到 FMX.位图

转载 作者:行者123 更新时间:2023-12-01 16:16:11 24 4
gpt4 key购买 nike

我在网上找到了这段代码,但是FMX.Bitmap没有扫描线。是否可以以某种方式将 VCL.TBitmap 复制或绘制到 FMX.Bitmap ?

{$IFDEF MSWINDOWS}
type
TBitmap = FMX.Types.TBitmap;
TVclBitmap = Vcl.Graphics.TBitmap;

procedure TakeScreenshot(Dest: FMX.Types.TBitmap);
var
DC: HDC;
Size: TPointF;
VCLBitmap: TVclBitmap;
Y: Integer;
begin
VCLBitmap := nil;
//Size := FMX.Platform.IFMXScreenService.GetScreenSize;
DC := GetDC(0);
try
VCLBitmap := TVclBitmap.Create;
VCLBitmap.PixelFormat := pf32bit;
VCLBitmap.SetSize(Trunc(Size.X), Trunc(Size.Y));
BitBlt(VCLBitmap.Canvas.Handle, 0, 0, VCLBitmap.Width, VCLBitmap.Height,
DC, 0, 0, SRCCOPY);
Dest.SetSize(VCLBitmap.Width, VCLBitmap.Height);
{ The format of a FMX bitmap and a 32 bit VCL bitmap is the same, so just
copy the scanlines. - not true- FMX bitmap does not have ScanLine? }
for Y := Dest.Height - 1 downto 0 do
Move(VCLBitmap.ScanLine[Y]^, Dest.ScanLine[Y]^, Dest.Width * 4);
{Dest.Canvas.DrawBitmap(); Not possible to assign or draw}
finally
ReleaseDC(0, DC);
VCLBitmap.Free;
end;
end;
{$ENDIF}

最佳答案

您可以使用流:

{$IFDEF MSWINDOWS}

type

TVclBitmap = Vcl.Graphics.TBitmap;

procedure TakeScreenshot(Dest: TBitmap);
var
DC: HDC;
Size: TPointF;
VCLBitmap: TVclBitmap;
Y: Integer;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
VCLBitmap := nil;
// Size := FMX.Platform.IFMXScreenService.GetScreenSize;
DC := GetDC(0);
Size.X := 500;
Size.Y := 500;
try
VCLBitmap := TVclBitmap.Create;
VCLBitmap.PixelFormat := pf32bit;
VCLBitmap.SetSize(Trunc(Size.X), Trunc(Size.Y));
BitBlt(VCLBitmap.Canvas.Handle, 0, 0, VCLBitmap.Width, VCLBitmap.Height, DC,
0, 0, SRCCOPY);
Dest.SetSize(VCLBitmap.Width, VCLBitmap.Height);
{ The format of a FMX bitmap and a 32 bit VCL bitmap is the same, so just
copy the scanlines. - not true- FMX bitmap does not have ScanLine? }
VCLBitmap.SaveToStream(MS);
MS.Position := 0;
Dest.LoadFromStream(MS);
MS.Free;
{ Dest.Canvas.DrawBitmap(); Not possible to assign or draw }
finally
ReleaseDC(0, DC);
VCLBitmap.Free;
end;
end;
{$ENDIF}

关于delphi - VCL.位图到 FMX.位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19212811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com