Drukowanie poważyny problem,z jednoczesnym obrazem i tekstem

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Drukowanie poważyny problem,z jednoczesnym obrazem i tekstem

Nowy postprzez dawiddawido » środa, 28 stycznia 2009, 23:48

Witam
Zaczne od of ale trudno :D . Chciałem wszystkich przywitać na forum, oczywiście jest mi znane bo to jest moje kolejne konto na forum, (mam nadzieje żę tym razem adres się nie zmieni :P )

Oki a wracając do tematu.

Mam obiekt typu TImage na którym wyświetlam obraz. Na nim jeszcze dodatkowo mam chyba z 6 TLabel-ów . Używałem porady ze strony cyfrowego barona , ale udaje mi sie tylko wydrukować zawartość TImage.

I teraz moje pytanie, czy da się jakoś zrobic abym mógł wydrukować zawartość Timage i te label-e ?
Jestem skłonny nawet zapisać sobie wcześniej widok tego zestawienia (zawartość image i labelów, ) jako plik bmp , który po wydrukowaniu zostanie usuniety.
pozdro
Avatar użytkownika
dawiddawido
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): środa, 28 stycznia 2009, 23:37
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Drukowanie poważyny problem,z jednoczesnym obrazem i tekstem

Nowy postprzez Cyfrowy Baron » czwartek, 29 stycznia 2009, 10:20

Umieszczenie obiektów Label na Image nie sprawi, że będzie je można wydrukować, gdyż po pierwsze Image nie może przejąć kontroli nad żadnym obiektem, gdyż nie posiada własnej powierzchni, po drugie, drukowanie odbywa się na powierzchni typu TCanvas.
Skorzystałeś prawdopodobnie z porady Drukowanie grafiki, powinieneś więc zauważyć, że grafika z obiektu jest przerysowywana na powierzchnię Canvas drukarki:

Printer()->Canvas->CopyRect(Rect(10, 10, x, y), Bmp->Canvas, Rect(0, 0, Bmp->Width, Bmp->Height));

a to oznacza, że kopiowany jest nie cały obiekt lecz zawartość tegoż obiektu, co więcej kopiowana jest zawartość płótna Canvas tegoż obiektu. Obiekty Label nie dziedziczą klasy TCanvas więc nie można ich drukować tak jak grafiki, ale można pobrać ich zawartość i wydrukować jako tekst na tym samym płótnie co grafikę, ale żeby grafika nie zakryła tekstu, to najpierw wrzucasz na płótno Canvas drukarki grafikę a potem na t samo płótno wrzucasz tekst.

Wyobraź sobie drukowanie na płótnie Canvas drukarki jak malowanie obrazu na zwykłym płótnie (kartce papieru), najpierw malujesz na typ płótnie obraz, a potem umieszczasz na obrazie napis, gdybyś zrobił odwrotnie to zamalowałbyś tekst obrazem.

W dużym uproszczeniu może t wyglądać tak:

Kod: Zaznacz cały
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Bmp->Assign(Image1->Picture->Bitmap); // Image musi zawierać bitmapę, jeżeli nie należy dokonać konwersji


Printer()->BeginDoc();

int x = Printer()->PageWidth;  // długość strony.
int y = Printer()->PageHeight; // wysokość strony.

int width;
int height;

if((x / Bmp->Width) < (y / Bmp->Height))
{
  width = Bmp->Width * ((x / Bmp->Width) + 0.5);
  height = Bmp->Height * ((x / Bmp->Width) + 0.5);
}
else
{
  height = Bmp->Height * ((y / Bmp->Height) + 0.5);
  width = Bmp->Width * ((y / Bmp->Height) + 0.5);
}

Printer()->Canvas->CopyRect(Rect(10, 10, width, height), Bmp->Canvas, Rect(0, 0, Bmp->Width, Bmp->Height)); // <- tutaj Image

Printer()->Canvas->Brush->Style = bsClear; // usuwanie tła spod tekstu - tło przeźroczyste
Printer()->Canvas->TextOut(100, 200, Label1->Caption); // <-- tutaj Label->Caption

Printer()->EndDoc();
delete Bmp;


To jak sobie wypozycjonujesz tekst na grafice zależy w głównej mierze od tego jaki algorytm skalujący i pozycjonujący opracujesz.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Drukowanie poważyny problem,z jednoczesnym obrazem i tekstem

Nowy postprzez dawiddawido » piątek, 30 stycznia 2009, 23:55

A czy da się jakoś zrobić aby textout ustawić przeźroczystość ?

Chodzi mi oczywiście o to aby pod tekstem nie zostawało białe tło. Nie wygląda to zbyt sympatycznie na grafice
Avatar użytkownika
dawiddawido
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): środa, 28 stycznia 2009, 23:37
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Drukowanie poważyny problem,z jednoczesnym obrazem i tekstem

Nowy postprzez Cyfrowy Baron » sobota, 31 stycznia 2009, 13:25

Masz to przecież podane w przykładowym kodzie. Najpierw usuwasz tło spod tekstu, a potem umieszczasz tekst:

Kod: Zaznacz cały
Printer()->Canvas->Brush->Style = bsClear; // usuwanie tła spod tekstu - tło przeźroczyste
Printer()->Canvas->TextOut(100, 200, Label1->Caption); // <-- tutaj Label->Caption
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Drukowanie poważyny problem,z jednoczesnym obrazem i tekstem

Nowy postprzez dawiddawido » sobota, 31 stycznia 2009, 13:42

Sorry faktycznie
Nie zauważyłem :D

Przyjrzałem się temu i robiłem stąd ten problem , gdybym skopiował pewnie nie było by problemu :P

Wielkie dzięki
Ostatnio edytowano sobota, 31 stycznia 2009, 14:40 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Poprawiono błąd ortograficzny, wyraz 'z tąg' zastąpiono wyrazem stąd
Avatar użytkownika
dawiddawido
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): środa, 28 stycznia 2009, 23:37
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron