2012-11-05 11 views
5

Tego właśnie potrzebuję: Program do szybszego tworzenia zabawnych plakatów na facebooku. Plakaty mają tekst, obraz i ramkę (biała linia i czarne tło). W tym przypadku chcę wstawić logo na plakacie (zdjęcie png).Jak dodać ramkę obrazu i wstawić tekst na obrazie?

W zależności od rozmiaru obrazu, wymiary ramki (która w tym przypadku składa się z dwóch kształtów) muszą być automatycznie zmieniane dla obrazu.

enter image description here

Jak zapisać plakat z tego zdjęcia z linku (komponenty 2 kształtu, elementów graficznych 2, 2 etykiety) jak obraz?

Jak to zrobić? Co używać, od czego zacząć?

Mam nadzieję, że to pytanie nie zostanie usunięte.

+0

Jaka wersja Delphi używacie? –

+2

You IMHO nie powinien używać kształtów, paneli, etykiet itp. Możesz użyć Canvas np. bitmap lub HDC z GDI + dla nieograniczonej liczby opinii. To nie jest trudne, a ty byłbyś nieograniczony. – bummi

Odpowiedz

9

Jeśli umieścisz wszystkie ramki, kształty i obrazy wewnątrz nowego TPanel (o nazwie MainPanel w moim próbki), a następnie można użyć:

procedure savePanelAsImage(fpPanel: tPanel; fpFileName: string); 
var 
    img: TBitmap; 
begin 
    img := TBitmap.Create; 
    try 
    img.Width := fpPanel.Width; 
    img.Height := fpPanel.Height; 
    fpPanel.PaintTo(img.Canvas, 0, 0); 
    img.SaveToFile(fpFileName); 
    finally 
    img.Free; 
    end 
end; 

Zastosowanie:

savePanelAsImage(MainPanel, 'd:\someFolder\image001.bmp'); 

Notatki:

  • To jest próbka oparta na VCL;
  • Aby zapisać obraz w innym formacie (raczej w BMP) użyj: TPngImage (Vcl.Imaging.pngImage) lub TJPEGImage (Vcl.Imaging.jpeg);
  • Jeśli używasz klawisza FireMonkey (> = Delphi XE2), możesz skorzystać z funkcji ParentComponent.MakeScreenShot();
  • Wynikowy obraz będzie miał taki sam rozmiar jak tPanel.

Dla lepszych wyników/elastyczności sugerowałbym korzystanie z biblioteki Delphi w bibliotece Graphics32 (obsługuje warstwy, zmianę rozmiaru obrazu itp.).

Example form

Resulting image

+0

Dobra odpowiedź. Dodatkowe punkty za podanie przykładu z zrzutami ekranu i propozycjami alternatywnymi –

+0

Używam Delphi XE3. Dziękuję za odpowiedź, @WoutervanNifterik powiedział wszystko. :) –

Powiązane problemy