Cuprins
Atrageți MetaTrader 5 nu este greu, trebuie să știți doar câteva nuanțe. De exemplu, modul în care ecranul terminalului în sine. Mai precis, ne interesează, cum este de ieșire grafică pe ecranul terminalului. La urma urmei, ecranul în sine un grafic poate fi afișat în fundal, și pot fi afișate în prim-plan. Din această locație va depinde de culoarea de ieșire de pe ecran. Unele obiecte grafice atunci când sunt afișate se pot schimba culoarea în zona de intersecție.
Înainte de a trece la Desenarea folosind clasa CCanvas. trebuie să învețe unele definiții legate de procesare a culorilor. De exemplu, și că o astfel de transparență, care este un canal alfa.
Punerea în aplicare a transparenței, cred tehnologia cea mai importantă pe care le puteți utiliza pentru a condimenta imaginea. De exemplu, folosind transparența poate fi realizată interfață mai frumos - cu o tranziție lină de culoare sau la umbră. Shadow da volum și vizual obiect grafic înmoaie marginile obiectului.
1. Transparență (Alpha)
Trăim într-o lume tridimensională și percep toate obiectele din jurul nostru voluminos. Volumul obiectelor din jurul nostru am folosit pentru a vedea, sau chiar se simt. În lumea tridimensională putem distinge care obiect este mai aproape sau mai departe de noi.
Cu toate acestea, unele elemente pot fi translucide. De exemplu, să ia o cupă de sticlă transparentă cu un lichid translucid turnat în ea pe un fundal albastru. Prin geamul lichidului poate fi văzut fundal albastru din spate. Mai mult decât atât, gradul de transparență a unui lichid depinde de fundal detaliată.
Fig. 1. aspect familiar la volumul
Transparența în acest exemplu și nu virtuală iluzorie. Transparența în acest caz, este văzută ca o chestiune de curs.
Atunci când o imagine este afișată pe un ecran de computer este diferit - un pixel bidimensionale display-uri matrice: imaginea afișată matrice are o înălțime și lățime, dar nu are o a treia opțiune - adâncime. Prin urmare, nu este posibil să se aranjeze pixelii unul pe altul - cum să simuleze situația: pixelul inferior - un fundal galben, top pixel - sticlă translucidă. Orice imagine de obiect tridimensional și realist pe monitor - este o iluzie, care se realizează prin jocul de culoare și umbră.
Luați în considerare exemplul unei imagini care poate fi împărțită în două straturi: stratul de jos - un fundal albastru și stratul superior - geamul lichidului opac. Cum arată pe ecran:
Fig. 2. Sticla opacă
Pe imaginea rezultată din sticlă complet opacă. Dar, pentru a adăuga (schimbare) transparența aveți nevoie de toate culorile imaginii convertit la o reprezentare ARGB-culoare.
Reprezentarea 2. ARGB culori
Despre transparență de sticlă, nu am uitat. Detalii cu privire la această problemă va fi discutată în a doua parte.
Reprezentarea culorilor ARGB - un tip de 4 octet uint. în care următoarele valori sunt înregistrate în ordinea de canal alfa, roșu, verde, albastru. Asta este, pentru a da transparență culoarea în format RGB adauga bytes in plus cu valoarea de transparență - canal alfa.
Valoarea alfa este dată o valoare de la 0 (suprapunere de pixeli de culoare din stratul superior nu se schimba pixel de afișare de bază a stratului inferior) la 255 (full color suprapuse și se suprapune peste un pixeli de culoare care stau la baza). transparența culorii în ceea ce privește procentul este calculat după cum urmează:
Aceasta este, mai mică valoarea alfa, culoarea mai transparentă. Deci, dacă știm transparența pe care dorim să realizăm, valoarea alfa poate fi calculată după cum urmează:
Pentru a converti o reprezentare de culoare este funcția ARGB ColorToARGB (culoare, alfa).
3. Desen schematic al obiectelor din terminal
Pentru a înțelege mai bine modul de prelucrare de culoare, ia în considerare schema de dispunere reciprocă a obiectelor grafice la cele două opțiuni de setări grafice: un grafic în fundal, și programul de mai sus.
3.1. Graficul din fundal
Verificați această setare poate fi după cum urmează: click dreapta pe grafic, apoi alegeți din meniul drop-down selectați Și du-te la tab-ul „General“ „Properties.“.
Fig. 4. Program de fundal
grafica Window terminal este format din patru straturi. Pe cele două straturi exterioare ( „Background“ și „foreground“) pot fi trase:
Fig. 5. Schema de fereastra graficului
În fundal (background) și grafica prim-plan atunci când se elaborează suprapuse pe reciproc, în conformitate cu momentul creării sale.
Aceasta este, în partea de jos a stratului de „Background“ strat și „Foreground“ va fi cel mai obiectelor grafice „vechi“. Va fi suprapus pe partea de sus a unei „tinere“ obiecte grafice.
Fig. 6. Dispunerea obiectelor, în funcție de momentul creării
Nu toate obiectele grafice se pot suprapune complet, fără a revopsirea în domeniu (sau câmpuri) de intersecție cu care stau la baza obiectelor grafice.
Tabelul de mai jos rezumă caracteristicile obiectelor grafice. iar după masa este o explicație a modului în care să se suprapună obiecte care se deghizează la intersecțiile.
Tabel. 1. Suprapunere transparență și grafică
Pe exemplul celor trei obiecte de tip OBJ_RECTANGLE (dreptunghiuri), ia în considerare revopsirea algoritmul la intersecțiile ale obiectelor care deghizează (fișier xor.mq5).
Script (fișier xor.mq5) stabilește un fundal de culoare albă (0xFFFFFF) și atrage dreptunghiuri №1 și №2 albastru (0x0000FF) un dreptunghi umplut №3 afișat în roșu (0xFF0000) pentru a umple.
Fig. 7. redesenare. Graficul din fundal
Cifra sa transformat două zone de intersecție în cazul în care culoarea a fost repictate:
- Zona №1 - culoarea rezultată (0x000000) este complet transparent, astfel încât zona poate fi văzut №1 fundal neperekrashennye și program;
- Zona №2 - culoarea rezultată (0x00FF00).
obiecte grafice, cum ar fi dreptunghiuri atunci când traversează masca folosind operația SAU algoritm nivel de bit.
Pentru Fig. 6 de mai jos prezintă un exemplu de zugrăvirea de culori pentru ambele zone:
Tabel. 3. XOR logic pentru Albastru + Rosu + Alb
3.2. Graficul din prim-plan
Atunci când programul este setat la „graficul de sus“ aranjament de straturi în fereastra diagramă este diferită de locația în care programul este în fundal:
Fig. 8. Schema de fereastra graficului. Program de top
Când setarea pentru grafica „Program de mai sus“ două straturi pentru desen „prim-plan“ și „de fond“ sunt conectate într-un singur strat comun. Acest strat este, în general, partea de jos sub straturi cu bare și ochiuri.
3.3. Zugrăvească „Program de sus“
Ca și în cazul fig. 7, ia în considerare algoritmul zugrăvirea la intersecțiile de obiecte care deghizează (fișier xor.mq5).
Script (fișier xor.mq5) stabilește un fundal de culoare albă (0xFFFFFF) și atrage dreptunghiuri №1 și №2 albastru (0x0000FF) un dreptunghi umplut este desenată în №3 roșu (0xFF0000) pentru a umple.
Fig. 9. Revopsirea. Graficul din prim-plan
Dacă vom compara Fig. 7 și Fig. 9, se observă că zona de intersecție aceeași deghizare.
4. culori amestecare. Culoarea rezultată
Așa cum am spus mai sus, imaginea de transparență pe ecran - aceasta este o iluzie. joc de culoare. Pentru a simula Fig. 2 pe ecran, doar un pic - pentru a înțelege, și ca o culoare cu adevărat un ecran transparent, pe monitor? Asta este, cum să calculeze culoarea rezultată a pixel?
Lăsați pe un fundal alb (de fundal este în schema de culori grafic „negru pe alb“) vrem să se bazeze pe canalul c alfa roșu pânză, setat la 128. Formatul ARGB, culoarea va avea un record 0x80FF0000. Pentru a calcula culoarea rezultată este necesară pentru a calcula culoarea fiecare dintre canalele (roșu, verde, albastru).
Formula de calcul culoarea rezultată după aplicarea culorii și alfa, normalizat la unitate:
- Rezultatul - valoarea rezultată a intensității unui canal de culoare. Dacă valoarea este mai mare decât 255, returnează 255.
- Valoarea canal de culoare de fundal - fundal.
- prim-plan - valoarea canal de culoare a imaginii impuse.
- alfa - valoare alfa normalizat la unitate.
Calculăm culoarea rezultată în conformitate cu formula (1.3):
Alpha canal, normalizat la „1“
Componentele de culoare sunt procesate de către terminal
Tabel. 5. Metode de procesare a culorilor când se creează pânza
COLOR_FORMAT_ARGB_NORMALIZE produce o imagine frumoasă luând în considerare componentele corecte suprapunere RGB. Calculul culorii finale după aplicarea culorii cu canal alfa are loc în conformitate cu formula (1.3).
COLOR_FORMAT_ARGB_RAW produce nici un control asupra RGB componentele de culoare preaplin și, prin urmare, COLOR_FORMAT_ARGB_RAW metodă mai rapidă în comparație cu COLOR_FORMAT_ARGB_NORMALIZE.
Formula de calcul culoarea rezultată după aplicarea culorii și alfa, normalizat la unitate pentru metoda COLOR_FORMAT_ARGB_RAW:
- Rezultatul - valoarea rezultată a intensității unui canal de culoare. Dacă valoarea este mai mare decât 255, returnează 255.
- Valoarea canal de culoare de fundal - fundal.
- prim-plan - valoarea canal de culoare a imaginii impuse.
- alfa - valoare alfa normalizat la unitate.
5. Iluzia transparenței
Acum puteți trece la punerea în practică a transparenței.
Pe graficul trage cateva dreptunghiuri cu o umplere (script „xor.mq5“). Pentru a ilustra diferența tehnicilor de procesare grafică color peste impunem pe panza trei orizontal fără a se suprapune.
Originea are metoda de prelucrare COLOR_FORMAT_XRGB_NOALPHA, al doilea - COLOR_FORMAT_ARGB_RAW și al treilea - COLOR_FORMAT_ARGB_NORMALIZE. Apoi schimba treptat opacitatea de la 255 (complet opac) la 0 (complet transparent). Să ne numim „Illusion.mq5“ script-ul nostru.
Fig. script illusion.mq5 11. Munca
5.1. Crearea unui script „Illusion.mq5“
Adăuga sau modifica părți ale codului vor fi evidențiate.
Este încă un script șablon gol:
Adăugați o descriere a script-ul, la parametrii de intrare atunci când scriptul este rulat și conectați clasa CCanvas - clasa, datorită căreia vom trage:
Pentru executarea script-ul va avea nevoie de câteva variabile - înălțimea și lățimea a diagramei, înălțimea și lățimea pânzei, precum și variabile auxiliare pentru a picta coordonatele panza:
Pentru lățimea și înălțimea graficului folosim funcții standard.
Mai departe direct la OnStart ().
Pentru claritate, în fig. 12 prezintă structura panza pe grafic și notația variabilelor auxiliare pentru pânza de coordonate:
Fig. 12. Coordonate pe un grafic
Obținem înălțimea și lățimea graficului și se calculează coordonatele variabilelor auxiliare pentru Canvas:
După ce a calculat lățimea și înălțimea pânzei, și coordonatele auxiliare pot începe desen.
Apoi schimba tipul funcției void OnStart () int și va desena pe teren panza umplut dreptunghi, un text cu numele metodei de procesare a culorilor pe panza, iar acest lucru cercuri pline:
Voi discuta despre ultimul cod inserat.
canvas_XRGB_NOALPHA.CreateBitmapLabel - Aici am creat o resursă grafică, care este legat la un obiect grafic.
panza de origine este creat cu modul de procesare a imaginii COLOR_FORMAT_XRGB_NOALPHA - componenta alfa atunci când desen vor fi ignorate.
Ne umple întreaga panza în ARGB formatul de culoare transparenta c alfa.
Deoarece pentru aceasta panza specificat modul de procesare a imaginii COLOR_FORMAT_XRGB_NOALPHA - pânză full color va exclude alfa.
Afișează textul - procesarea imaginii de acest tip pentru panza. Culoarea textului în format și alfa canale ARGB este de 255, adică, culoarea textului afișat este complet opac.
Textul mesajului și atașat orizontal (TA_CENTER) și pe verticală (TA_VCENTER) în centrul casetei de încadrare.
Desenați un cerc solid. Cercul va fi desenat deasupra culorii, pe care am umplut panza (canvas_XRGB_NOALPHA.Erase (ColorToARGB (COLR, alfa));).
Acest lucru este de a demonstra că cifra desenată pe panza (sau zona / punct) sub o complet șterge modelul de baza pe panza. Adică, nu revopsire pe panza nu vor, pentru că model de ultima ieșire șterge complet zona de sub o.
Dacă dorim toate desenat este afișat pe ecran, aveți nevoie pentru a actualiza ecranul.
În mod similar, celelalte două sunt desenate în panza: panza cu COLOR_FORMAT_ARGB_RAW al doilea mod de afișare și a treia panza cu modul de afișare COLOR_FORMAT_ARGB_NORMALIZE:
Pânză și Grafică pictate în interiorul panza.
Acum, face o buclă care va schimba transparența tuturor pânzei:
Schimbarea transparenței tuturor panza se face cu ajutorul liniilor de forma:
După încheierea desenului trebuie pentru a curăța - îndepărtați resursele grafice.
Din moment ce am creat o resursă grafică cu referire la subiectul diagramei (metoda CreateBitmapLabel), apoi ștergeți resursa realizată folosind metoda Destroy () - și, în același timp, graficul șters obiect (Bitmap Label):
Script-ul, schimbarea lin transparența activității.
Am act de faptul că diferența dintre modurile de afișare și COLOR_FORMAT_ARGB_RAW COLOR_FORMAT_ARGB_NORMALIZE evident mai ales în cazul în care script-ul pentru a rula mai întâi pe grafic fundal alb, apoi pe un fundal negru.
concluzie
Acest articol a acoperit elementele de bază de lucru cu culoare, am învățat cum să atragă în fereastra graficului. De asemenea, acoperite de elementele de bază de a lucra cu clasa CCanvas Standard Library, a aflat despre prezentarea culorilor de transparență în format ARGB.
Acesta este doar începutul pe drumul de a crea un efect cu adevarat frumoase pentru obiecte grafice în MetaTrader terminalul 5. Încă o dată vreau să se concentreze pe transparență: și anume transparența parțială oferă cea mai frumoasă formă de invecineaza grafică. În virtutea transparenței monitorului bidimensională în programul - aceasta este o iluzie, realizată prin tratarea pixelilor sunt suprapuse.