Cześć, na ScrollBox mam kilka TImage i trochę innych wizualnych komponentów.
Teraz chcę zrobić tak, żeby wszystkie TImage zapisały się do jednego pliku bmp. Chcę mieć po prostu plik wynikowy.
Napisałem sobie kod, który po mojemu powinien był zadziałać. Ale efektem jest całkiem biała bitmapa, o odpowiednich rozmiarach:
var
bmp: TBitmap;
c: TCanvas;
i: integer;
r: TRect;
begin
c:=TCanvas.Create;
c.Handle:=GetWindowDC(MainScrollBox.Handle);
//kopiuję wszystkie obiekty na canvas
r:=Rect(0, 0, MainScrollBox.Width, MainScrollBox.Height);
for i:=0 to Images.Count-1 do
c.CopyRect(r, Images[i].Canvas, Images[i].ClientRect)
//potrzebuję zapisać tylko pewien obszar
bmp:=TBitmap.Create;
bmp.Height:=FImage.Height;
bmp.Width:=FImage.Width;
bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), c, Rect(FImage.Left, FImage.Top, FImage.Width, FImage.Height));
bmp.SaveToFile(FileName);
FreeAndNil(bmp);
FreeAndNil(c);
end;
Małe wyjąsnienie.
FImage - mam dla ułatwienia. Ten komponent ogranicza mi pole zapisu. Tzn. tylko to co jest na tym obszarze chcę zapisać do pliku. Oczywiście w tym obszarze mam obrazy.
Co tu jest nie tak?