Nie mogę okiełznać CopyRect

0

Oto kolejny problem, który doprowadza mnie skutecznie do łysiny.
Postaram się to jakoś zobrazować.

Mam Panel o rozmiarach 1000x500. Na panelu mam Image o rozmiarach 150x50. Image znajduje się w pozycji 500x250 (left top)

W obrębie tego image'a mam różne komponenty. Chcę zapisać do pliku to, co jest właśnie w jego obrębie. Tworzę sobie obiekt TBitmap, który ma rozmiary panela i rysuje na nim w kolejności wszystkie grafiki, które się znajdują na panelu.

Następnie tworzę sobie drugi TBitmap, który ma za zadanie zapisać do pliku konkretny wycinek pierwszego TBitmap:

bmp.Width:=Image.Width;
bmp.Height:=Image.Height;
bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), sourceBmp.Canvas, Rect(Image.Left, Image.Top, Image.Width, Image.Height));
bmp.SaveToFile(Filename);

I powiedzcie proszę, co tu jest źle? Efektem wykonania tego kodu jest pusta bitmapa o odpowiednich rozmiarach(150x50). Jednak, gdy zapiszę sourceBmp(sourceBmp.SaveToFile), to mam bitmapę 1000x500 ze wszystkimi grafikami w odpowienich miejscach. Dlaczego mi ten CopyRect nie działa? Jakieś propozycje?

0

Prawdopodobnie błąd powoduje ten fragment:

Rect(Image.Left, Image.Top, Image.Width, Image.Height)

Image.Left > Image.Width i/lub Image.Top > Image.Height, co daje w wyniku niepoprawny prostokąt

0

Nie pamiętam, co przyjmuje Rect, ale czy nie przypadkiem: left, top, RIGHT, BOTTOM ?! Bo wtedy powinno być:

Rect(image1.left, image1.top, image1.left + image1.width, image1.top + image1.height) zamiast tego Rect(Image.Left, Image.Top, Image.Width, Image.Height)

1 użytkowników online, w tym zalogowanych: 0, gości: 1