gpt4 book ai didi

delphi - 在 Firemonkey 中使用 JPG

转载 作者:行者123 更新时间:2023-12-02 03:31:10 25 4
gpt4 key购买 nike

我有一个压缩图像,我正在尝试接收它并在android平台上显示它,在vcl中我一直在做类似以下的事情

procedure TForm1.CreateJpg(Data: string);
var
JpegStream: TMemoryStream;
JpegImage: TJPEGImage;
Bitmap: TBitmap;
tmpPos, tmpLen: integer;
pp: string;
begin

try
tmpPos := Pos('B]>', Data);
pp := Copy(Data, 5, tmpPos - 5);
tmpLen := StrToInt(pp);
Data := Copy(Data, tmpPos + 3, tmpLen);
Bitmap := TBitmap.Create;

try
JpegImage := TJPEGImage.Create;

try
JpegStream := TMemoryStream.Create;

try
TIdDecoderMIME.DecodeStream(Data, JpegStream);
JpegStream.Position := 0;
JpegImage.LoadFromStream(JpegStream);
finally
JpegStream.Free;
end;

with Bitmap do
begin
Canvas.Lock;

try
Width := JpegImage.Width;
Height := JpegImage.Height;
Canvas.StretchDraw(rect(0, 0, 200, 160), JpegImage);
finally
Canvas.Unlock;
end;
end;
finally
JpegImage.Free;
end;

img.Assign(Bitmap);
finally
Bitmap.Free;
end;
except
on E: Exception do
//
end;
end;

但是我不能在android中做同样的事情,因为没有TJPEGIMAGE库的声明我不确定我是否可以在上做一些事情来替代JPEG Fire-monkey 我对我必须做什么感到困惑

最佳答案

VCL 使用 TGraphic 派生类来处理各个图像类型。然而,FireMonkey 中没有与 TGraphic 等效的东西。它只有一个 TBitmap支持多种图像类型的类。不同的 FMX 平台支持不同的图像类型子集(有关完整列表,请参阅 Supported Image Formats)。幸运的是,JPG 是所有 FMX 平台都支持的仅有的两种图像类型之一(另一种是 PNG)。

与 VCL 代码等效的 FMX 看起来像这样:

procedure TForm1.CreateJpg(Data: string);
var
JpegStream: TMemoryStream;
Jpeg, Bitmap: TBitmap;
tmpPos, tmpLen: integer;
pp: string;
begin
try
tmpPos := Pos('B]>', Data);
pp := Copy(Data, 5, tmpPos - 5);
tmpLen := StrToInt(pp);
Data := Copy(Data, tmpPos + 3, tmpLen);

Bitmap := TBitmap.Create;
try
Jpeg := TBitmap.Create;
try
JpegStream := TMemoryStream.Create;
try
TIdDecoderMIME.DecodeStream(Data, JpegStream);
JpegStream.Position := 0;
Jpeg.LoadFromStream(JpegStream);
finally
JpegStream.Free;
end;

with Bitmap do
begin
SetSize(Jpeg.Width, Jpeg.Height);

if Canvas.BeginScene then
try
Canvas.DrawBitmap(Jpeg,
{$IF RTLVersion >= 31} // 10.1 Berlin or higher
Jpeg.BoundsF,
{$ELSE}
TRectF.Create(0, 0, Jpeg.Width, Jpeg.Height),
{$IFEND}
TRectF.Create(0, 0, 200, 160), 1.0);
finally
Canvas.EndScene;
end;
end;
finally
Jpeg.Free;
end;

img.Bitmap.Assign(Bitmap);
finally
Bitmap.Free;
end;
except
on E: Exception do
//
end;
end;

关于delphi - 在 Firemonkey 中使用 JPG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43106420/

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