【发布时间】:2018-07-12 21:51:31
【问题描述】:
我有一个小问题,我正在尝试将 TLayout (LayoutScale) 的一部分保存在 Timage (ImmagineCreata) 中。由于 TLayout (LayoutScala) 非常大,我想将它分解成许多 8000x8000 的图像,但我得到的是许多尺寸正确但全白的图像,并且只有第一张图像填充了 TLayout 的所有内容但爬上了 8000x8000
procedure TForm1.Button1Click(Sender: TObject);
var ImmagineCreata : FMX.Graphics.TBitmap;
NumImgX, NumImgY, x, y, dimensioneX, dimensioneY : integer;
begin
if (LayoutScala.Width > 8000) or (LayoutScala.Height > 8000) then
begin
//valuta il numero di immagini da fare in x e in y
NumImgX := 1 + (Round(LayoutScala.Width) div 8000);
NumImgY := 1 + (Round(LayoutScala.Height) div 8000);
//salva le immagini
for y := 1 to NumImgY do
begin
//dimensione lato in y
dimensioneY := 8000;
if (y = NumImgY) then dimensioneY := Round((NumImgY * 8000) - LayoutScala.Height);
//valuta l'altro verso
for x := 1 to NumImgX do
begin
//dimensione lato in x
dimensioneX := 8000;
if (x = NumImgX) then dimensioneX := Round((NumImgX * 8000) - LayoutScala.Width);
// Crea il rettangolo di disegno con le dimensioni dell'immagine
ImmagineCreata := FMX.Graphics.TBitmap.Create(dimensioneX, dimensioneY);
ImmagineCreata.Clear(TAlphaColorRec.White);
ImmagineCreata.Canvas.BeginScene;
//Traccia il controllo e i suoi figli nel bitmap di destinazione
try LayoutScala.PaintTo(ImmagineCreata.Canvas, RectF((x-1)*8000, (y-1)*8000, ((x-1)*8000)+dimensioneX, ((y-1)*8000)+dimensioneY));
finally ImmagineCreata.Canvas.EndScene;
end;
// Salva l'immagine
ImmagineCreata.SaveToFile('C:\Immagine'+x.ToString+'.'+y.ToString+'.jpg');
//svuota la memoria
ImmagineCreata.Free;
end;
end;
end;
end;
我使用 Delphi 10.2.3 和 FireMonkey
【问题讨论】:
-
8000×8000 像素大小的图片已经很大了。我会把它切成小块。例如,许多地图应用程序创建者使用 256×256 像素大小的图像。
-
请不要将代码作为图像发布。这完全是无用的浪费。
-
但是有什么解决办法呢?
标签: delphi firemonkey