Fancy font

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Fancy font

Post by mesajflaviu » 14 Sep 2012, 10:43

Buna. Pe un view in care afisez un bitmap, as vrea sa suprapun un text transparent. Orice culoare am folosit pentru acest text, exista cazuri, in functie de bitmap-ul din fundal, cand acel text nu se distinge (textul ramane fix pe device, adica pe view)... si ma gandesc ca o solutie ar fi sa desenez un text in genul subtitrarilor din filme, de culoare alba dar cu contur negru. Problema e ca nu stiu cum sa creez acest tip de font ... am incercat tot felul de combinatii din structura LOGFONT, degeaba ... ma puteti ajuta ?



mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Fancy font

Post by mesajflaviu » 14 Sep 2012, 13:37

Ar ajunge sa pot desena acel text cu culori inverse background-ului, dar metoda CDC::SetROP2 care ar putea face acest lucru, am vazut ca nu se aplica obiectelor grafice de tip text : http://msdn.microsoft.com/en-us/library ... s.80).aspx.

mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Fancy font

Post by mesajflaviu » 14 Sep 2012, 15:14

Am rezolvat pana la urma, dar pare ca aceasta solutie nu functioneaza decat de la o anumita marime a fontului in sus:

Code: Select all

	pDC->BeginPath();
	pDC->TextOut(20, 20, _T("Test string"));
	pDC->EndPath();
	pDC->StrokeAndFillPath();

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Fancy font

Post by bu7ch3r » 14 Sep 2012, 17:09

Din cate imi aduc eu aminte daca aveam nevoie sa fac shadow desenam de doua ori, odata cu negru si odata cu alb. Clasa mea(era buton parca) avea metode sa setez culorile la font, sa spun in ce parte vreau umbra, offsetul dintre text si ubra si...cam atat.
Aaaa si avea si glow, desenam de doua ori, odata cu transparenta (75-50 la suta) si odata normal deasupra. O grozavie ce mai. Iti mai trebe niste dc-uri si AlphaBlend.

Dar defapt, tu asta vrei sa obtii?

Image
Cu stima,
Lupu Claudiu

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Fancy font

Post by Ovidiu Cucu » 16 Sep 2012, 09:27

Adaug si eu cateva metode la cele enumerate deja.
  1. Cauti un font cu "outline", de exemplu http://www.1001freefonts.com/outline-fonts.php.
    Cu conditia sa arate bine si sa fie free sau sa se incadreze in bugetul tau. In plus trebuie sa-l instalezi pe masina target. N-am incercat asa ceva insa banui ca ai avea aceleasi probleme la dimensiuni mai mici ca cea care ai spus-o mai devreme.
  2. Te apuci de bit-twidlerit, ca sa setezi pe culoarea dorita bitii din jurul textului.
    Doar ca sa-ti faci o idee, trage un ochi in articolul asta: http://www.codeproject.com/Articles/210 ... indows-GDI
    Se poate mai simplu pentru ce-ti trebuie tie, insa oricum ramane "munca de Sisif".
  3. Folosesti o biblioteca care are deja implementate asemenea efecte. S-ar putea sa te ajute GDI+ insa nu sunt sigur.
  4. Pui textul intr-un "text box" (desenezi un dreptungi in spatele textului pe care-l umpli cu o culoare care sa faca textul lizibil).
  5. Pur si simplu setezi culoarea textului cu CDC::SetTextColor si culoarea fundalului cu CDC::SetBkColor (cu back mode OPAQUE). Metoda ciobaneasca, ca si cea precedenta, insa fara dureri de cap.
Depinde, la ce-ti trebuie efectiv. Pentru a pune pur si simplu un titlu peste o imagine si in lipsa altor specificatii, eu as opta pentru #4 sau #5.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Fancy font

Post by Ovidiu Cucu » 16 Sep 2012, 10:56

...in fine, poti combina diverse metode si efecte, cum ar fi in aceasta imagine pe care am gasit-o pe Facebook. :biggrin:
Apel umanitar pe Facebook.jpg
Apel umanitar pe Facebook.jpg (44.75 KiB) Viewed 7288 times

mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Fancy font

Post by mesajflaviu » 17 Sep 2012, 08:42

Ma gandeam prima data sa fac un shadow textului, dar o sa incerc ultima solutie, cu un background aproape transparent, sa vad cum arata ... multumesc tuturor pentru solutii.

mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Fancy font

Post by mesajflaviu » 18 Sep 2012, 09:35

Pentru cei care ar intampina aceeasi problema, pun aici codul care deseneaza un text cu culoare inversa background-ului:

Code: Select all

	CFont fontScale;
	fontScale.CreateFont(-12,0,0,0,400,FALSE,FALSE,0,
		ANSI_CHARSET, OUT_DEFAULT_PRECIS,
		CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
		DEFAULT_PITCH | FF_SWISS, _T("Arial"));

	int nOldBkMode = pDC->SetBkMode(TRANSPARENT);
	CFont* pFontOld = pDC->SelectObject(&fontScale);
	pDC->SetTextAlign(TA_CENTER | TA_TOP);
	pDC->BeginPath();
	pDC->TextOut(100, 100, _T("Test string"));
	pDC->EndPath();
	pDC->SetROP2(R2_NOTMASKPEN);
	CPen pen;
	pen.CreatePen(PS_SOLID, 0, RGB(0,255,255));
	pDC->SelectObject(&pen);
	pDC->StrokeAndFillPath();
	pDC->SetBkMode(nOldBkMode);
	pDC->SelectObject(pFontOld);
bine, pe fond alb, textul e rosu, dar pe fond gri/negru textul va avea o culoare inversa background-ului.

Post Reply