You are on page 1of 97

N DESEN TASARIMI N BLGSAYAR ORTAMINDA GRAFK MODLLER GELTRLMES M.

Emre SYLEMEZ Yksek Lisans Tezi Elektrik Elektronik Mhendislii Anabilim Dal Temmuz - 2009

N DESEN TASARIMI N BLGSAYAR ORTAMINDA GRAFK MODLLER GELTRLMES

M. Emre SYLEMEZ

Dumlupnar niversitesi Fen Bilimleri Enstits Lisansst Ynetmelii Uyarnca Elektrik Elektronik Mhendislii Anabilim Dalnda YKSEK LSANS TEZ Olarak Hazrlanmtr.

Danman : Do. Dr. Alparslan DUYSAK

Temmuz 2009

iii KABUL ve ONAY SAYFASI M. Emre SYLEMEZin YKSEK LSANS tezi olarak hazrlad N DESEN TASARIMI N BLGSAYAR ORTAMINDAGRAFK MODLLER GELTRLMES balkl bu alma, jrimizce lisansst ynetmeliin ilgili maddeleri uyarnca deerlendirilerek kabul edilmitir. .. / .. /2009

YE YE YE

: Do. Dr. Alparslan DUYSAK : Yrd. Do. Dr. Hasan TEMURTA : Yrd. Do. Dr. Mahmut AYHAN

Fen Bilimleri Enstitsnn Ynetim Kurulunun kararyla onaylanmtr.

/ / . gn ve . sayl

Prof. Dr. Atalay KKBURSA Fen Bilimleri Enstits Mdr

iv N DESEN TASARIMI N BLGSAYAR ORTAMINDA GRAFK MODLLER GELTRLMES M. Emre Sylemez Elektrik Elektronik Mhendislii, Yksek Lisans Tezi, 2009 Tez Danman: Do. Dr. Alparslan Duysak ZET Grafik tasarmlarn bilgisayar ortamnda yaplmas hem zamansal hem de maddi anlamda maliyeti drmektedir. Son yllarda bilgisayar teknolojilerinin de gelimesi ile birlikte bilgisayar ortamnda tasarm kavram bir hayli gelimitir. Geleneksel sanatlarmzdan olan ini tasarm iin imdiye kadar bilgisayar ortamnda klasik desenler ile tasarma olanak salayan bir alma yaplmamtr. Tez kapsamnda yeni yazlm teknolojilerini kullanarak ini desenlerinin bilgisayar ortamnda yaplabilmesine olanak salayan bir resim ileme yazlm gelitirilmesi ve onun kulland teknolojiler aratrld. Yazlm .NET teknolojilerinden GDI+ kullanld. GDI+ n yazlm ierisinde kullanlan zellikleri GDI+ zellikleri blmnde detaylandrld. Gerekli bilgileri aklandktan sonra yazlm ile ilgili detaylar ortaya konuldu. Sonu olarak gelitirilen yazlm eitim amal yada ticari olarak kullanlabilecek bir rn olarak deerlendirilebilir. Ak kaynak kodlu olmas sebebi ile ihtiyalara gre gelitirilerek kullanlabilecektir. Anahtar Kelimeler : ini Desen Tasarm ,Dijital Tasarm, GDI+ , Grsel Programlama, .NET Grafik Programlama

v DEVELOPING GRAPHICAL MODULES FOR DESIGNING TILES IN COMPUTER ENVIRONMENT M. Emre Sylemez Electric and Electronical Engineering , M.S.Thesis, 2009 Thesis Supervisor:Assoc.Prof. Alparslan Duysak SUMMARY Computer-aided design (CAD) reduces cost in the manner of time and money. In recent years with the development in computer tehcnology CAD is developed accordingly. There is no research for Turkish traditional tile-art designing with classical patterns using computer aid. With this thesis I try to figure out how this traditional art could be designed using a software and which technologies will be used to develop this software. This Design software is developed using .NET technology and GDI+ Library for graphical programming. I tried to explain GDI+ technologies in details. After techology explanations I described software architecture.As a result of this thesis, this software would be used for commercial purpose and education as well. And the software is developed under GPL Open Source licence, so it could be modified and developed for other requeriments by other researchers. Keywords: Computer-Aided Design, Tile Design, GDI+, Visual Programming, Graphical Programming with .NET

vi TEEKKR Bu almada bana yardmc olan bata danman hocam Do. Dr. Alparslan Duysaka, desteini hep yanmda hissettiim eim Meryem Sylemeze, ini desenleri ve tasarm hakknda verdii desteklerden tr Hseyin Karaosmanoluna ve emei geen herkese teekkr bir bor bilirim.

vii NDEKLER Sayfa ZET .................................................................................................................................... SUMMARY .......................................................................................................................... EKLLER DZN............................................................................................................... ZELGELER DZN ......................................................................................................... SMGELER ve KISALTMALAR DZN ........................................................................... 1. GR ................................................................................................................................ 1.1. Geleneksel Trk ini Sanatnn Ksa Tarihesi ......................................................... 1.2. Geleneksel ini Tasarm Sreci ................................................................................. 1.2.1. Deirmen:............................................................................................................ 1.2.2. Filter pres: ........................................................................................................... 1.2.3. Vakum pres: ........................................................................................................ 1.2.4. Kndeleme ilemi: .............................................................................................. 1.2.5. ablon tornayla ekillendirme: ............................................................................ 1.2.6. ark tornayla ekillendirme: ............................................................................... 1.2.7. Astarlama: ........................................................................................................... 1.2.8. Biskvi piirim: ................................................................................................... 1.2.9. Tahrirleme: .......................................................................................................... 1.2.10. Boyama: ............................................................................................................ 1.2.11. Srlama: ............................................................................................................. 1.2.12. Mamul piirimi:................................................................................................. 1.3. Bilgisayar Ortamnda ini Tasarlamak ...................................................................... 2. GDI ve GDI+ (Graphical Device Interface)...................................................................... 2.1. GDI Hakknda ............................................................................................................ 2.2. GDI+ Hakknda .......................................................................................................... 2.2.1. GDI+ Namespaces/Isim Alanlar ........................................................................ 2.3. GDI ve GDI+ Farklar ................................................................................................ 3. GDI+ BLEENLER ....................................................................................................... 3.1. Snflar........................................................................................................................ 3.2. Fonksiyonlar............................................................................................................... 3.3. Sabitler ....................................................................................................................... 3.4. Enumarasyonlar ......................................................................................................... 3.5. Yaplar........................................................................................................................ 3.6. Graphics Nesnesi........................................................................................................ 3.6.1. Graphics nesnesi ile yaplabilecekler .................................................................. 3.7. Koordinat Sistemi ...................................................................................................... iv v x xii xiii 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5 5 6 6 6 6 8 11 11 11 11 11 12 12 14 15

viii NDEKLER (devam) Sayfa 3.7.1. Koordinat Uzay .................................................................................................. 3.7.2. Gerek l Birimleri ......................................................................................... 3.8. Noktalar ve Boyutlar (Point & Size) .......................................................................... 3.8.1. Noktalar ............................................................................................................... 3.8.2. Boyutlar ............................................................................................................... 4.8.3. Dikdrtgenler ...................................................................................................... 3.9. izim ve Boyama ....................................................................................................... 3.10. Renkler ..................................................................................................................... 3.11. Kalemler (Pen) ......................................................................................................... 3.11.1. Standart Pen Nesneleri ...................................................................................... 3.11.2. 4.12 Fralar (Brush) ......................................................................................... 3.11.3. Tek Renkli Fralar - Solid Brush .................................................................... 3.11.4. Desenli Fralar Hatch Brushes ...................................................................... 3.11.5. Dokuma Fralar Texture Brushes ................................................................. 3.11.6. Derece Derece Deien Fralar - Gradient Brushes......................................... 4. GRAFK LEMLER N ALIMA ALANI TASARLAMAK ................................ 4.1. alma Alannn Tasarlanmas ................................................................................. 4.2. alma Alanna Scroll Bar Eklenmesi ve Ynetimi ................................................. 4.3. alma Alannn Ekrana izilmesi ........................................................................... 4.4. Transformasyonu leklendirmek ............................................................................. 4.5. Onpaint Olay zerindeki Deiiklikler .................................................................... 4.6. alma Alannn zellikleri...................................................................................... 4.7. Fare mlecinin Gerek ve Sanal Koordinatlarn Hesaplamak ................................... 4.8. Program Test Etmek ................................................................................................. 5. BLGSAYAR ORTAMINDA N DESEN TASARLAMAK .................................... 5.1. Program Hakknda ..................................................................................................... 5.2. Programn Bileenleri ................................................................................................ 5.2.1. alma Alan ...................................................................................................... 5.2.2. Desen Kutusu ...................................................................................................... 5.2.3. Desen Ara Kutusu ............................................................................................. 5.2.4. alma Alan Seim Kutusu .............................................................................. 5.2.5. Dokman Gemii Geri ve leri Al Tular ......................................................... 5.2.6. Fra Ara Kutusu ............................................................................................... 5.2.7. Silgi Ara Kutusu ................................................................................................ 5.2.8. Ara Seimi ......................................................................................................... 16 17 19 19 19 20 21 25 27 27 33 34 35 38 39 41 41 43 44 49 52 54 55 58 65 65 66 66 67 67 68 68 69 69 69

ix NDEKLER (devam) Sayfa 5.2.9. Programn Kullanl .......................................................................................... 5.2.10. Programda Desen Kavram ............................................................................... 5.2.11. Programa Eklenilecek Dier zellikler ............................................................ 6. PROGRAMIN YAZILIM TEKNOLOJLER ................................................................. 6.1. izim Aralar ............................................................................................................ 6.2. History Manager ........................................................................................................ 7. SONU VE NERLER .................................................................................................. KAYNAKLAR DZN ........................................................................................................ 69 77 78 79 80 81 83 84

x EKLLER DZN ekil 1.1. Tahrirleme ilemi. ........................................................................................................ 1.2. Boyama ilemi.............................................................................................................. 2.1. Gradient Brush ............................................................................................................. 2.2. Cardinal Spline ............................................................................................................. 2.3. Gradient Brush ile boyanm Path................................................................................ 2.4. Transformasyona uram path nesneleri..................................................................... 2.5. leklenebilir Blgeler ................................................................................................ 3.1. Graphics nesnesi ile eitli izimler ............................................................................. 3.2. Form zerinde (0,0) noktasndan izim. ...................................................................... 3.3. Gerek l birimleri ile izim. ................................................................................... 3.4. Dikdrtgenler ile izim rnei. .................................................................................... 3.5. izim ve Boyama rnei.............................................................................................. 3.6. Standart pen ile izim. .................................................................................................. 3.7. Balang ve bitii deitirilmi izim rnei. ............................................................. 3.8. Standart pen ile zigzag izimi. ..................................................................................... 3.9. Balang ve bitii deitirilmi pen ile zigzag. ........................................................... 3.10. LineCap rnekleri. ....................................................................................................... 3.11. DashStyle rnekleri. ..................................................................................................... 3.12. Karmak Pen nesnesi gsterimi. ................................................................................. 3.13. Karmak Pen nesnesi ile izilmi rnekler.................................................................. 3.14. Fra ile boyama rnekleri. .......................................................................................... 3.15. Tek renkli fralar......................................................................................................... 3.16. Desenli Fralar ............................................................................................................ 3.17. Texture Brushes ........................................................................................................... 3.18. Texture resmi. .............................................................................................................. 3.19. Derece Derece Deien Fralar rn. 1 ........................................................................ 3.20. Derece Derece Deien Fralar rn. 2 ........................................................................ 3.21. Derece Derece Deien Fralar rn. 3 ........................................................................ 4.1. eitli yaknlatrma oranlar ve alma alan. ........................................................... Sayfa 3 4 8 9 9 10 10 14 15 18 20 23 27 28 28 29 30 31 32 32 34 34 37 38 38 39 39 40 41

xi EKLLER DZN (devam) ekil 4.2. alma alan rnek boyama. ....................................................................................... 4.3. alma alanna scroll bar eklenmesi. .......................................................................... 4.4. Transformasyonu leklendirmek ............................................................................... 4.5. alma alanna yaknlatrma zellii eklemek. ......................................................... 4.6. alma alanndaki sanal alma alannn aklamas. ................................................ 4.7. alma alannn rnek ekran kts. ........................................................................... 5.1. Program genel grnm. .............................................................................................. 5.2. Program Bileenleri...................................................................................................... 5.3. Desen klasr ............................................................................................................... 5.4. Program ara seimi. .................................................................................................... 5.5. Program mens .......................................................................................................... 5.6. Yeni dkman mens................................................................................................. 5.7. Tabak desenleri mens ............................................................................................... 5.8. Desen boyutu seimi. ................................................................................................... 5.9. Desen aracnn seimi. ................................................................................................. 5.10. Yaklatrma deerinin deitirilmesi. .......................................................................... 5.11. Tabak deseninin yerletirilmesi.................................................................................... 5.12. Tabak d deseni yerletirilmesi. .................................................................................. 5.13. Desen rnekleri ............................................................................................................ 5.14. Hatai yaprak deseni yerletirilmesi .............................................................................. 5.15. Lale deseni yerletirilmesi............................................................................................ 5.16. Tasarmn programda bitmi hali. ................................................................................ 5.17. Tasarm rnei. ............................................................................................................ 5.18. Tasarmn kayt edilmesi. ............................................................................................. 5.19. Ayn desenler ile farkl bir tasarm rnei. .................................................................. 6.1. SIR Program snf diyagram. ..................................................................................... 6.2. HistoryManager snf. ................................................................................................. 6.3. HistoryItem snf. ........................................................................................................ Sayfa 48 49 50 54 55 58 65 66 67 69 70 70 71 71 71 72 72 73 74 74 75 75 76 76 77 79 82 82

xii ZELGELER DZN izelge Sayfa 26 26 36

3.1. Sistem Renkleri ............................................................................................................. 3.2. Named Colors. .............................................................................................................. 3.3. HatchBrush stilleri. .......................................................................................................

xiii SMGELER ve KISALTMALAR DZN Ksaltmalar GDI GDI+ .NET C# Aklama Grafik aygtlat arayz (Graphical Device Interface) Grafik aygtlat arayz (Graphical Device Interface) ynetilen kod versiyonu. Microsoft firmasnn yeni yazlm teknolojisine verdii isim. (C Sharp eklinde okunur) .NET teknolojisinin kulland yazlm dillerinden birisi. Dilin yaps c ve c++ a benzemektedir.

1 1. GR 1.1 Geleneksel Trk ini Sanatnn Ksa Tarihesi lk mslman Trk Devletini kuran Karahanllar dnemine ait yaplarda grlmeye balayan ini ssleme gelenei, Trk ini Sanatnn bin yl akn bir gemie sahip olduunu gstermektedir. Byk Seluklular ve Anadolu Seluklular tarafndan ini sslemeleri devam ettirilmi, Seluklular, egemenlikleri altna aldklar yerlerde ina ettikleri pek ok cami, medrese, kervansaray, saray, trbe ve benzeri eserleri inilerle bezemilerdir.

Anadolu Seluklu Devletinin dalmasndan sonra, ini geleneini srdrme abas, Anadoluda kurulan Beyliklere dm ve nihayet Osmanl Devletinin kuruluuyla yeni bir dnem balamtr. 1.2 Geleneksel ini Tasarm Sreci 1.2.1 Deirmen: ini yaplacak hammaddelerin(kil,kaolin, kuvars vb.) suyla kartrlp homojen bir ekilde tlp, kartrlmas iin kullanlr. i tamamen anmaya dayankl olan silex tayla kapldr. tme ileminin istenilen ekilde yaplabilmesi iin deirmenin 1/4 kuru malzeme + 1/4 su + 1/4 nmeyi salayan irili ufakl(en k ceviz, en by 2 yumruk kadar olan) silex talaryla doldurulmas ve 1/4 'nnde bo braklmas gerekir. Deirmenin iindeki talarn ve necek malzemenin merkezka kuvvetiyle savrulmamas iin dk devirde evrilmesi gerekir. Ortalama 8 saat dndrlerek tlen malzeme boza kvamna gelir. 1.2.2 Filter pres: Deirmende tlen ve boza kvamnda olan malzemenin suyunun alnmas iin kullanlr. Boya kvamndaki malzeme filter prese gelmeden nce 1,5-2 gn dinlendirme havuzunda dinlendirilerek suyunun bir ksmn kaybetmesi salanr. Malzeme filter presten geirildikten sonra ortalama olarak suyunun %80 ni kaybederek ilenebilecek amur haline gelir.

2 1.2.3 Vakum pres: Filter preste suyunun %80 ini kaybeden amurun iinde hava kasecikleri de mevcuttur. Vakum presle bu hava kabarcklar yok edilir. Vakum presten havas tamamen alnarak kan amur, kurumamas ve istenilen plastik kvamn kaybetmemesi iin poetler iine doldurularak depolanr. Bylece amur uzun sre zelliini kaybetmeden durabilir. 1.2.4 Kndeleme ilemi: amurun ilenerek ham maml haline getirilme aamalarnn en banda yaplacak mamln byklne gre paralara ayrlmas ve rahata ilenebilmesi iin yorulmas gelmektedir. Bu ileme kndeleme denir. Kndecinin amur paralarn istenilen boyutlarda hazrlamas nemlidir. Paralarn istenilen kklkte veya byklkte olmamas amuru ileyen asndan handikaplar oluturur. Ve rnn boyutlarndaki deimelere neden olur. Yaplan rnlerin hepsinin standart llerde biribirinin tpatp ayns olamamasnn nedeni budur. Kndecinin dikkat edecei dier hususlardan biri de amuru yoururken ayn zamanda iinde hava kabarc brakmamasdr. Hava kabarc yksek derecedeki frnda genilemeye neden olur ve rn frnda paralanr. 1.2.5 ablon tornayla ekillendirme : Kase ve tabaklarn retiminde kullanlan aamadr. Kndecinin hazrlad amur paralar torna zerine monte edilen al kalplar zerine konularak ustann maharetli elleri tarafndan ekillendirilir. Her bir mamul iin ayr bir kalp kullanlr. nk maml kuruyuncaya kadar kalbn zerinde kalr. Bu ii yapabilmek uzun yllarn birikimi ve belli bir maharete sahip olmay gerektirir. Usta zel bir bak yardmyla mamuln zerinde duraca ve ayak denilen alt ksmn da yapar. Ustann eliyle ekillenen mamul, zerinde bulunduu al kalptan alnmadan kuruma ilemine braklr. Kurumann ok yava olmas ve mamuln hava akmndan korunmas gerekir. Aksi takdirde mamuln atlayp deforme olmasna ve kullanlamamasna neden olur. Kuruma ileminin 2 gnde gerekletirilmesi en salkl olandr. 1.2.6 ark tornayla ekillendirme: Dik mal denilen vazo, kavanoz, bardak, ibrik vb. mamullerin retiminde kullanlan tekniktir. Bu yntemde usta yine kndeci tarafndan hazrlanan amuru alarak torna zerinde tamamen el becerisiyle mamul yapar. Bu yzden zor bir daldr ve byk bir tecrbe ve kabiliyet gerektirir.

3 Ustann mahareti ve tecrbesi yapt mamullerin birbirine olan yaknlyla ortaya kar. Ustann maharetine gre 5cm den 90cm-100cm 'e kadar mamuller yaplabilir. Tabi ki byk mamullerin yaplmas zordur ve ayr bir maharet gerektirir. ablon tornada yaplan mamullerin kurutulmas iin gerekli olan artlar bu mamuller iin de geerlidir. 1.2.7 Astarlama: ekillendirilen mamullerin daha parlak ve beyaz grnmesi ve zerindeki przlerin, gzeneklerin giderilmesi iin zerine bir eit amur olan astar tatbik edilir. Bu ilem frayla yaplr ve astarlamann homojen olmasna ve mamuln her yzeyine eit miktarda yaplmasna dikkat edilmesi gerekir. Aksi takdirde dalgal bir grnt olur ve mamuln gzellii bozulur. 1.2.8 Biskvi piirim: Btn bu aamalardan sonra mamul 1000C de piirilmeye hazr hale gelir. eitli ebatlarda ve odunlu, elektrikli veya gazl frnlarda piirilir ve biskvi adn alr. Artk mamul dekorlanmaya hazr hale gelmitir. Biskvi piirimi 24 saat srer. 10 saat frnn yanp 1000C ye gelmesi 14 saatte soumas iin geen sredir. Frnlama aamasnda karlalan problem mamuln atlamas veya krlmasdr. Bu yzden frnlama ilemi bittikten sonra her mamul gizli atlak olup olmadnn belirlenmesi iin kontrol edilir. Bu ilem mamuln ele alnp bir ta parasyla vurularak yaplr. Eer mamul atlaksa kof bir ses verir. Bu ilem de tecrbe gerektirir. 1.2.9 Tahrirleme:

ekil 1.1 Tahrirleme ilemi.

Dekorlamann ilk aamas tahrirlemedir. Mamuln zerine yaplacak olan desen, ilk nce usta eller tarafndan ince katlara izilir. Desenler yaplrken klasik Osmanl desenlerinin ve motiflerinin yannda modern dizaynlarda kullanlr. Bir desenin gzel izilmesi, izenin becerisine ve bir lde de duygularna baldr. nce kat zerine izilen desenler, toplu

4 ineyle delinir. Daha sonra mamuln zerine konur ve kmr tozu kullanlarak desenin ana hatlar mamuln zerine geirilir. Ardndan tahrirci ad verilen kiiler tarafndan desen btn hatlaryla izilir. Bu aamada samur fra ve tahrir boyas kullanlr.Genellikle lale, karanfil, gl, haner yapra, smbl, nariei, kalyon, bulut, bcek, hayali hayvan motifleri, selvi aac, intemani, papatya, mine, minyetr insan figrleri, hali, lotus, hatai, rumi, babanakka, bahar dal, geometrik ekiller, balk pulu, hayat aac gibi ok zgn desenler izilir. 1.2.10 Boyama :

ekil 1.2 Boyama ilemi.

Tahrirlenen yani izilen desenin boyanmas aamasdr. Boyaclar nceden belirlenen renklerdeki deseni samur ve kl fralarla boyarlar. Basit grnmesine karn zor bir itir. Kiinin psikolojik durumu dahi bu ilemi etkiler. Ayr deseni yapmalarna karn her kiinin deseni farkl olur ve mamuller birbirinin ayns olmaz. nk her ustann vuru teknii farkldr. Renklendirme de genellikle koyu(kobalt) ve ak mavi, turkuvaz mavisi, mercan krmzs, patlcan moru, hazar yeili ve farkl tonlarda yeil renkler kullanlr. 1.2.11 Srlama: Dekorlanan mamuller hammaddesi silis olan ve sr ad verilen boza kvamndaki svya daldrlarak, bu svyla kaplanmas salanr. Sr mamule parlakl veren ve desenin zarar grmemesini salayan maddedir. St grnmndedir fakat pitiinde cam grnmn alr. Srlama inicilikte nemli bir aamadr. Zira srn ince, kaln veya daha baka ekilde yanl yaplmas, bin bir emekle yaplan gzelim desenin istenilen grnme sahip olamamasna neden olur. Ayrca boyalardaki istenmeyen renk deiikliklerinin, akmalarn, kaymalarn ve matln nedeni de srlamann iyi yaplamamasndandr.

5 1.2.12 Mamul piirimi: Srlanan mamuller 900C de piirilir. Biskvi piiriminden farkl olarak bu ilemde yksek sya dayankl raflar veya ayaklar kullanlr. nk srl mamullerin birbirine temas etmemeleri gerekir. Ayn ekilde mamullerin ayaklara ve raflara temas eden yerlerinde ki srlar da temizlenir, aksi takdirde mamul rafa yapr ve ancak krlarak ayrlr. Bu piirmede yaklak 21 saat sren 9 saat frnn yanmas 12 saat ise soumas iin geen sredir. Bu piirimde biskvi piirimde olduu ve zellikle de soutmann hzl yaplmamas gerekir. Ayrca frndaki s dalmlarnn homojen olmasna dikkat edilmelidir. 1.3 Bilgisayar Ortamnda ini Tasarlamak Bilgisayar ortamnda ini tasarm yapmak geleneksel olarak el mahareti isteyen bir sanat iin ilk bakta ok anlaml gelmeyebilir. ini ilemecilii ve desenleri itibari ile yerlemi bir sanattr. Tasarmlarda lale, snbl vs. gibi benzer desenler yer almaktadr. Bu desenlerin deiik kombinasyonlarda eitli yzeylerde uygulanmsa sonucu deiik tasarmlar ortaya kmaktadr. Bu ilemin el ile deneme yanlma yolu ile yaplmas zaman almakta ve maliyetli olmaktadr. Ayrca tm desenlerin tek bir at altnda topland bir bilgisayar ortamndaki tasarm alan retkenlii artracaktr.

6 2. GDI ve GDI+ (Graphical Device Interface) 2.1 GDI Hakknda GDI microsoft'un iletim sisteminde kulland grafik arayz bileenidir. Bu arayz ile birlikte ekrana ve yazcya kt alnabilmektedir.Fontlar, renk paletleri, izgiler ve bitmapler gibi nesnler bu arayz ile kullanlabilmektedir. DirectX or OpenGL gibi teknolojilerin aksine GDI sadece iki boyutlu izimler zerinde ilem yapmaktadr. 2.2 GDI+ Hakknda .NET teknolojisinin ortaya kmas ile birlikte yazlmclarn bu i iin kullanabilecekleri alternatiflere yenileri eklenmitir. .NET Framework ile birlikte gelen birok ktphane , snf ve hazr fonksiyon yazlmclara yeni imkanlar sunuyor. Bu balamda GDI + , genellikle Windows altnda Grafik izmede kullanlan GDI (Graphics Device Interface) ara yznn olduka gelitirilmi ve kolaylatrlm halidir diyebiliriz. GDI+, .NET Framworkdeki System.Drawing snf altnda desteklenmektedir. Bu snf aracl ile Windows altnda grsel zelliklere sahip uygulamalar gelitirebiliriz. GDI, C++ dili ile grafik izmek iin oluturulmu snflar kmesi idi. Ancak GDI sorunlu idi. Bunun zerine GDI dili yenilendi ve GDI + haline getirdi. yle ki GDI dk ve orta dzey programlama ortam salyordu. Ancak GDI + ile yksek dzeyli programlama yapmak mmkn olabilmektedir. 2.2.1GDI+ Namespaces/Isim Alanlar .NETde GDI+ snflar System.Drawing.dll(assembly) iinde bulunan balca alt

namespace/isim alan u ekildedir: System.Drawing System.Drawing.Drawing2D System.Drawing.Imaging System.Drawing.Text System.Drawing.Design System.Drawing.Printing

7 System.Drawing Snf Metotlar. Metot AddMetaFileCom ment BeginContainer Clear DrawArc DrawEllipse DrawImage DrawLine DrawLines DrawPie DrawPolygon DrawRectangle DrawRectangles DrawString FillEllipse FillPie FillPolygon FillRectangle FillRectangles FillRegion GetClip Aklama Var olan meta dosyasna text aklama ekler. Overloaded. Yeni grafik container balatr. Graphics objesini ve zel renkleri temizler. Overloaded. Yay izer. Overloaded. Elips izer. Overloaded. Resim izer. Overloaded. izgi izer. Overloaded. Ard arda balantl satrlar izer. Overloaded. Pasta izer. Overloaded. okgen (poligon) izer. Overloaded. Dikdrtgen izer. Overloaded. Ard arda dikdrtgenler izer. Overloaded. Text izer. Overloaded. Brush kullanarak elipsin iini doldurur. Overloaded. Brush kullanarak pastann iini doldurur. Overloaded. Brush kullanarak okgenin iini doldurur. Overloaded. Brush kullanarak dikdrtgenin iini doldurur. Overloaded. Brush kullanarak ard arda dikdrtgenlerin iini doldurur. Brush kullanarak belli bir blgenin iini doldurur.. Kesilen blgeyi alr.

8 Restore Save 2.3 GDI ve GDI+ Farklar GDI+ GDI n desteklemedii yeni zelliklere sahiptir, bunlar; Gradient Brush : zetle Farkl renkle balayp farkl renkle biten fralardr. ki ekli vardr lineer gradient fralar ve Path gradient falar. Gradient fralar ile izgi, eri ve path nesnelerini izebilirsiniz. izim yaparken izimi yaplan nesnenin rengi aamal olarak tanmlanan dier renge doru deimektedir. Aadaki ekilde ii doldurulmu bir elips ile bir region nesnesi grlmektedir. Graphics objesi ile yaplm almann bir nceki kaydedilmi haline gnderir. Graphics objesi ile yaplanlar kaydeder.

ekil 2.1 Gradient Brush

Cardinal Spline : noktalar arasn keli izgiler ile birletirmek yerine eriler ile birletirmek iin kullanlr. Bu zellik GDI da desteklenmemektedir. Bu eriler bir noktalar dizisinden olumaktadr. Cardinal spline da keler yoktur belirlenen noktalar arasndaki erilerde birbirleri ile yumuak bir gei salarlar. Aadaki ekildeki iki izimden ilki cardinal spline ile birletirilmi noktalar dieri ise normal izgiler ile birletirilmi noktalar gstermektedir.

ekil 2.2 Cardinal Spline

Bamsz Path (Yol) Nesneleri : GDI da Path nesnesi izimden sonra yok olmaktayd ,GDI+ ile birlikte izimler Graphics nesnesi ile gerekletirilmektedir. Yani izim yapan nesne ile Path ayr nesneler tarafndan gerekletirilmektedir.

ekil 2.3 Gradient Brush ile boyanm Path.

Transformasyonlar ve Matrix (Matris) nesnesi : 3x3 boyutunda bir matris ieren bu nesne ile ok karmak grlen ilemler ok kolay bir ekilde gerekletirilmektedir. Bu nesne de GDI + in yeniliklerindendir. Trasformasyon ilemleri ileride daha detayl olarak aklanacaktr. zetle bu class yardm ile dndrme, yer deitirme, boyut deitirme, krpma gibi ilemler graphic izimleri zerinde gerekletirilebilmektedir. Aadaki rnek bir Path nesnesinin iki kere transformasyona uram eklini gstermektedir (ilk olarak x ekseni zerinde leklendirme sonra dndrme).

10

ekil 2.4 Transformasyona uram path nesneleri.

leklenebilir Blgeler (Region) : Blgeler GDI da donanm koordinat uzaynda tutuluyordu. Artk GDI+ ile birlikte Genel Koordinat Uzaynda ifade edilmektedir. Bylece transformasyon ilemleri matrisler aracl ile donanm bamsz olarak gerekletirilebilmektedir. Aadaki ekil kere transformasyona uram bir blgeyi gstermektedir (leklendirme, dndrme, tama)

ekil 2.5 leklenebilir Blgeler

11 3. GDI+ BLEENLER 3.1 Snflar GDI+ bnyesinde Color, Effect, 54 tane snf ColorCurve, iermektedir. ColorLUT, Bunlar ;

AdjustableArrowCap, Bitmap, BitmapData, Blur, BrightnessContrast, Brush, CachedBitmap, CharacterRange, CustomLineCap, FontFamily, ColorBalance, Graphics, Image, ColorMatrixEffect, FontCollection, HatchBrush, ImageItemData, EncoderParameter, EncoderParameters, Font,

GdiplusBase,

GraphicsPath,

GraphicsPathIterator, ImageCodecInfo,

HueSaturationLightness,

ImageAttributes,

InstalledFontCollection, Levels, LinearGradientBrush, Matrix, Metafile, MetafileHeader, PathData, PathGradientBrush, Pen, Point, PointF, PrivateFontCollection, PropertyItem, Rect, RectF, RedEyeCorrection, Region, Sharpen, Size, SizeF, SolidBrush, StringFormat, TextureBrush, Tint 3.2 Fonksiyonlar GDI+ bnyesinde aadaki fonksiyonlar barndrmaktadr. GdiplusShutdown, GdiplusStartup, GetImageDecoders, GetImageDecodersSize, GetImageEncoders, GetImageEncodersSize, GetPixelFormatSize, IsAlphaPixelFormat, IsCanonicalPixelFormat, IsExtendedPixelFormat, IsIndexedPixelFormat, ObjectTypeIsValid 3.3 Sabitler GDI+ bnyesindeki sabitler unlardr. Image File Format Constants, Image Frame Dimension Constants, Image Encoder Constants, Image Pixel Format Constants, Image Property Tag Type Constants, Image Property Tag Constants 3.4 Enumarasyonlar GDI+ da 55 tane Enumarasyon vardr.

12 BrushType, DashCap, ColorAdjustType, DashStyle, ColorChannelFlags, ColorMatrixFlags, CombineMode,

CompositingMode, CompositingQuality, CoordinateSpace, CurveAdjustments, CurveChannel, DitherType, DriverStringOptions, EmfPlusRecordType, EmfToWmfBitsFlags, EmfType, EncoderParameterValueType, EncoderValue, FillMode, FlushIntention, FontStyle, HatchStyle, HistogramFormat, HotkeyPrefix, ImageCodecFlags, ImageFlags, ObjectType, ImageLockMode, PaletteFlags, ImageType, InterpolationMode, ItemDataPosition, PenType, Unit, LinearGradientMode, LineCap, LineJoin, MatrixOrder, MetafileFrameUnit, MetafileType, PaletteType, PathPointType, StringTrimming, PenAlignment, Status, PixelOffsetMode, StringDigitSubstitute, WarpMode, WrapMode 3.5 Yaplar GDI+ da aadaki yaplar tanmlanmtr. BlurParams, BrightnessContrastParams, ColorMap, ColorBalanceParams, ColorPalette, ColorCurveParams, ENHMETAHEADER3, TintParams, RotateFlipType, StringFormatFlags, SmoothingMode, StringAlignment,

TextRenderingHint,

ColorLUTParams, LevelsParams,

ColorMatrix,

GdiplusAbort, GdiplusStartupInput, GdiplusStartupOutput, HueSaturationLightnessParams, PWMFRect16, RedEyeCorrectionParams, SharpenParams, WmfPlaceableFileHeader 3.6 Graphics Nesnesi GDI+ ile izim ilemlerinde Graphics nesnesi kullanlmaktadr. Graphics nesnesine programlama aamasnda bir ka yerden ulalabilmektedir. rnein nesnelerin (form ve Control) Paint olaynda PaintEventArgs ierisinde Paint olayn gerekletiren Graphics nesnesine eriilebilmektedir. Ayn ekilde OnPaintBackground olayda bu ekilde bir Graphics nesnesine sahiptir. Yazdrma ilemlerine kullanlan PrintPage olaynda da PrintPageEventArgs ierisinde bu nesneye ulalabilmektedir. Ayrca Hafzadaki bir resimede sanki ekrandaym gibi izimler yaplabilmektedir. Bir resimden veya daha sonra detayl olarak anlatlacak olan farkl objelerden de bu nesneyi oluturup yada kullanarak izimleri gerekletirmek mmkndr.

13 Graphics nesnesini programda iki ekilde kullanmak anlaml olacaktr. Birinci yntemde OnPaint ve PaintBackground metodlarn override ederek yeni tanmlamalar yapmak. kincisi bu metodlara eventHandler ekleyerek izimlerimizi yapmak. protected override void OnPaint(PaintEventArgs e) { // Graphics nesnesini PaintEventArgs den alyoruz Graphics g=e.Graphics; g.DrawLine(....); //yada direkt olarak da kullanabiliriz. e.Graphics.DrawLine(....); //Override edildii iin base class n paint event ini armamz //gerekir base.OnPaint (e); } //Paint EventHandler ile eriim. private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { // Graphics nesnesini PaintEventArgs den alyoruz Graphics g=e.Graphics; g.DrawLine(....); // yada direkt olarak da kullanabiliriz . } e.Graphics.DrawLine(....);

Bu ekildeki kullanmlarda Graphics nesnesi bulunduu kod blounun dna tanmamaldr.

14 3.6.1 Graphics nesnesi ile yaplabilecekler ekil izimi: Pen yani kalem nesnesi ile dikdrtgen, elips gibi eitli ekiller izebilir. Pen nesnesi deiik kalnlklarda deiik renklerde olabilmektedir. Ayrca ok daha karmak ie yarar zelliede sahiptir. i dolu ekil izimi: Brush yani fra nesnesi ile istenilen eklin ii boyanmaktadr. Brush nesnesi ok kompleks zelliklere sahiptir. Yaz izimleri: DrawString metodu ile istenilen yzeye yaz yazlabilmektedir. Resim izmek: DrawImage metodu ile eitli ekillerde bir resim datas istenilen yzeye izilmektedir. Graphics nesnesi zerinde oynamalar yapmak: Graphics nesnesinin zelliklerini deitirerek nasl ileyeceini dzenlemek mmkndr. rnein izimin kalitesi artrlp azaltlabilmektedir. Kalite ne kadar artarsa grafiin hzda o seviyede dmektedir. Yaknlatrma ,dndrme vs. gibi ilemlerde graphics nesnesinin grnt k parametreleri deitirilerek gerekletirlebilmektedir.

ekil 3.1 Graphics nesnesi ile eitli izimler

Yukardaki ekran grntsn karan kod blou. protected override void OnPaint(PaintEventArgs e) { Graphics g=e.Graphics;

15 g.DrawLine(Pens.Red,10,5,110,15); g.DrawEllipse(Pens.Blue,10,20,110,45); g.DrawRectangle(Pens.Green,10,70,110,45); g.FillEllipse(Brushes.Blue,130,20,110,45); g.FillRectangle(Brushes.Green,130,70,110,45); base.OnPaint (e); }

3.7 Koordinat Sistemi Dier grafik sistemlerine olduu gibi GDI+ da bir nesnenin pozisyonunu belirlemek iin X ve Y koordinatlarn kullanmaktadr. Bir noktay belirlemek iin iki say gereklidir. Bu iki say x ve y dzleminde noktann orjin noktasna olan uzakln belirtmektedir. rnein aadaki kod ile aadaki gibi bir izgi izebiliriz. g.DrawLine(Pens.Black,0,0,100,200); DrawLine a verilen ilk parametre izimi gerekletirecek olan Pen yani kalem nesnesini belirtiyor, 0,0 izginin izilmeye balayaca noktay belirtiyor. 100, 200 rakamlar ise bitecei yeri belirtiyor, rnek ekran kts aadaki gibidir. Dikkat edilirse varsaylan orjin burada formumuzun sol st kesindedir.

ekil 3.2 Form zerinde (0,0) noktasndan izim.

16

GDI+ da koordinatlar piksel olarak ifade edilmektedir. GDI+ znrlk bamsz bir sistem olarak tasarlandndan soyut bir kavram olan piksel ile birlikte gerek dnyann lleri ile de izim yapabilmektedir, cm, milimetre, in vs. . izimlerin gerek dnya lleri ile ifade edilebilmesi neticesinde GDI+ eski GDI da olduu gibi koordinatlar tam saylar ile ifade etmek zorunda deildir, bylelikle 1,5 cm yada 0,5 mm gibi deerler ile de izimler mmkndr. 3.7.1 Koordinat Uzay 3 tane koordinat uzay tanmlanmtr. Trke olarak aadaki ekilde ifade edebiliriz. Programlama terimleri ile de parantezler ierisinde terim karlklarn yazdm. - Genel Koordinat Uzay (World Coordinate Space) Grafik sisteminde iki boyutlu koordinat uzaynda yaptmz izimlerin ifade edildii alandr. Burda koordinatlar noktal kayan saylar ile ifade edilmektedir. zetle izilen tm nesneler bu uzayda piksel koordinatlar saklanmaktadr. - Sayfa Koordinat Uzay (Page Coordinate Space) Sayfa koordinat uzay genel koordinatlarn gerek dnya deerlerine dntrld ksmdr. Graphics nesnesinin PageUnit deeri deitirilerek izimlerin hangi l biriminde yaplaca belirlenebilir. Belirlenen l biriminde ki izimler buradan genel koordinat uzayna aktarlr. - Aygt Koordinat Uzay (Device Coordinate Space.) Bu koordinat uzay sistem tarafndan kullanlmaktadr. Sayfa uzayndaki gerek dnya deerleri aygtlarn kendi anlayacaklar tarzda ifade edilmektedir. Bu ksm 1 cm lik bir boyutun grnt ekranda grnecek ise ekranda 1 cm printer da olacaksa da orada 1cm olarak grnmesinden sorumludur. Ekran ve yazcnn piksel znrln birbirinden farkl olmasnn bir nemi yoktur. Programlama olarak bu katmana direkt etkimiz yoktur.

17 GDI+ bu koordinat uzaylarn kullanarak izimlerini gerekletirmektedir. Bu ilemlere grafik yolu (Graphics Pipeline) denmektedir. Son olarak kullanlan deerler alnp dntrldkten sonra gnderilecek donanmn (yazc-monitor) formatna dntrlp gnderilir. 3.7.2 Gerek l Birimleri Sayfa koordinat uzaynda ki gerek l birimlerini u ekilde listeleyebiliriz. Pixel : Bir renk deerini ifade eder. Ekrandaki yada yazcdaki bir noktaya tekabl eder. Donanmdan donanma deitii iin boyutu deikenlik gsterir. Milimeter ,Inch,: Srasyla milimetre ve in deerlerini ifade eder. Tm donanmlarda gerek boyutlar ile baslr. Point : bir inin 72 de birini ifade eder ve donanm bamszdr. Display : bir inin 75 de birini ifade eder. Donanm bamszdr. CRT moniterlerin kullanld zamanlardan kalmadr. World: Pixel ile kullanm ayn olmas beklenir. Ama pratikte hatalar ile karlalabilir. Pixel in kullanlmas tercih edilmelidir.

18

ekil 3.3 Gerek l birimleri ile izim.

Yukardaki ekran grntsn bastran kod blou. private void DrawRectangles(Graphics g) { g.PageUnit=GraphicsUnit.Pixel; Pen p=new Pen(Color.Black, 3); g.DrawRectangle(p,10,10,200,100); p.Dispose();

g.PageUnit=GraphicsUnit.Inch;

19 p=new Pen(Color.Blue,0.05f); g.DrawRectangle(p,0.1f,1.5f,4f,1f); p.Dispose(); g.PageUnit=GraphicsUnit.Millimeter; p=new Pen(Color.Green,1f); g.DrawRectangle(p,4f,80f,80f,60f); p.Dispose(); }

3.8 Noktalar ve Boyutlar (Point & Size) Uzunlular ve lokasyonlar iki boyutlu koordinat dzleminde belirtebilmek iin kullanlan Point ve Size nesneleri kullanlmaktadr. 3.8.1 Noktalar Point ve PointF yaplar ile tam say olarak yada virgll saylar ile bir noktann yerini X,Y dzleminde belirtebiliyoruz. Baz izim fonksiyonlar ar yklenmi versiyonlar ile hem PointF hemde Point yaplar ile izim yapabilmektedir. Aadaki rnek te DrawLine hem direkt X ve Y deerleri ile hemde Point nesneleri ile ararak ayn ilemleri yaptryorum.

myGraphics.DrawLine(Pens.Black,10,20,210,50); Point p1=new Point(10,20); Point p2=new Point(210,50); myGraphics.DrawLine(Pens.Black,p1,p2); 3.8.2 Boyutlar Genilik ve uzunluk eklinde ifade edebileceimiz Boyut (Size) nesneleri float ve single olarak deerler alabilmektedir.

20

4.8.3 Dikdrtgenler Rectangle ve RectangleF eklinde iki versiyonu olan dikdrtgen nesnesi bir dikdrtgen alan ifade etmektedir. Bir dikdrtgeni ifade etmek iin iki deer yeterlidir. Location ve Size, yani dikdrtgenin sol st kesi ile genilik ve uzunluk bilgisini ieren Size. Dikdrtgen nesnesi bunlarn haricinde dikdrtgenin dier zelliklerini de ieren baz alanlara sahiptir.

ekil 3.4 Dikdrtgenler ile izim rnei.

Dikdrtgenin kullanmna rnek olarak yukardaki ekran ktsn veren aadaki kod blou gsterilebilir. private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { SizeF mallSquareSize = new SizeF(0.1f*this.ClientRectangle.Width, 0.1f*this.ClientRectangle.Height); SolidBrush sb=new SolidBrush(Color.White); //siyah ve beyaz renk deiimlerini kontrol etmek iin kullanyoruz bool toggle=false; //10 adm aaya for(int y=0; y<10; y++) {

21 //10 adm sola for(int x=0; x<10; x++) { //fra rengi seimi if(toggle) sb.Color=Color.Black; else sb.Color=Color.White; //Dikdrtgeni oluturuyoruz RectangleF rc=new RectangleF( x*smallSquareSize.Width, y*smallSquareSize.Height, smallSquareSize.Width, smallSquareSize.Height); //renklendir e.Graphics.FillRectangle(sb,rc); //renk deitir toggle=!toggle; } //satr sonunda rengi deitir toggle=!toggle; } //brush nesnesini yok et sb.Dispose(); } 3.9 izim ve Boyama

DrawLine: Bir koordinattan dierine izgi izer.

22 DrawLines: Bir dizi ierisinde verilen koordinatlar zerinde izgiler dizer. DrawRectangle: Sol st kenin koordinatlar ve kenarlarn boyutlarnn tanmlanmas ile bir dikdrtgen izmektedir. DrawRectangles: DrawRectangle da olduu gibi dikdrtgen izmektedir. Dizi ile verilen bilgileri kullanmaktadr. FillRectangle: i dolu bir Dikdrtgen izmektedir. FillRectangles: i dolu dikdrtgenler izmektedir. DrawEllipse: Dikdrtgen iziminde olduu gibi oluturulmaktadr. Belirtilen bilgiler ile oluturulan dikdrtgenin ierisine elips izmektedir. FillEllipse: DrawEllipse gibi almaktadr. izdii elipsin iini doldurmaktadr. DrawPolygon: X,Y koordinatlarndan oluan dizi ierisindeki noktalar birletirerek bir poligon oluturmaktadr. FillPolygon: Belirtilen poligonu ii dolu izmektedir. DrawCurve: Kardinal Spline erisi izmektedir. Belirlenene noktlarn arasnda bir eriler izerek byk bir eriyi oluturmaktadr. DrawClosedCurve: Kapal olarak Cardinal Spline izimi ektedir. DrawBezier: Bezier erisi izmektedir. DrawPath : Path nesnesini izmektedir. FillPath: Path nesnesinin ierisini doldurmaktadr. DrawArc : Arkn izmektedir. Ark bir elipsin bir parasn ifade etmektedir. DrawPie: Grafiklerde kullanlan daire dilimlerini izmektedir. FillPie : Daire dilimi izerek iini boyamaktadr.

23 FillRegion: Region n ierisini boyamaktadr.

ekil 3.5 izim ve Boyama rnei.

protected override void OnPaint(PaintEventArgs e) { Graphics g=e.Graphics; //koordinatlar kullanarak izgi iz. g.DrawLine(Pens.Red,10,5,110,15); //Point leri nce tanmlayarak izgi iz Point p1=new Point(10,8); Point p2=new Point(110,18); e.Graphics.DrawLine(Pens.Plum,p1,p2); //PointF yaps ile tanmlanm bir poligon izimi PointF[] pts=new PointF[20]; float angle=0; for(int x=0; x<20; x++)

24 { pts[x]=new PointF(x*10,(float)(30+(15*Math.Sin(angle)))); angle+=(float)Math.PI/10; } e.Graphics.DrawLines(Pens.Blue,pts); //Eri zerindeki noktalarn zerine dairelerin izimi. foreach(PointF p in pts) e.Graphics.FillEllipse(Brushes.Green,new RectangleF(p.X-3,p.Y-3,6f,6f)); //Kapal bir poligon izimi ve boyanmas. Point[] poly=new Point[5]{ new Point(20,50), new Point(200,100), new Point(200,50), new Point(20,100), new Point(20,50) }; e.Graphics.FillPolygon(Brushes.Tomato,poly); Pen pen=new Pen(Color.Tan,4); e.Graphics.DrawPolygon(pen,poly); pen.Dispose(); //Dizi eklinde tanmlanm Rectangle-Dikdrtgen nesnelerinin izimleri. Rectangle[] rcs=new Rectangle[10]; for(int x=1; x<11; x++) rcs[x-1]=new Rectangle(80-(x*5),110+(x*12),x*10,12); e.Graphics.FillRectangles(Brushes.RoyalBlue,rcs);

25 e.Graphics.DrawRectangles(Pens.YellowGreen,rcs); base.OnPaint (e); }

3.10 Renkler Renkler Grafik sistemlerde eitli ekillerde ifade edilebilmektedir. Dijital ortamda en ok kullanlan renkleri belirtme ekli ise Krmz-Yeil-Mavi renklerinin karmndan oluan saysal deerler ile ifade etmektir. Bu renklerin ingilizce ba harflerinden meydana gelen RGB (RedGreen-Blue) renk sistemi neredeyse standart haline gelmitir. Renklerin yerlerinin deitirilmi versiyonlarda mevcuttur. Bu rengin belirlioranlardaki karmndan tm renkleri elde etmek mmkndr. GDI da RGB deki her renk deerini bir byte ifade etmektedir. Dolaysyla bir rengin ne kadar kartrlacan ifade etmek iin 0-255 aras deerler kullanlabilmektedir. Tm deerlerin sfr olmas siyah ifade ederken tm deerlerin 255 olmas beyaz ifade etmektedir. Yani tm renklerin karmndan beyaz olumaktadr. RGB ye ek olarak bir deer daha eklenmitir Alpha yani geirgenlik. Alpha deeri de byte olarak ifade edilmektedir. Alpha deeri sfr iken tamamen mat 255 iken ise tamamen geirgen olarak renk ifade edilir. Bir baka deyile alpha ne kadar yksekse geirgenlik o kadar artar. Alpha deeri ile birlikte RGB ye ARGB denmektedir. GDI+ renkler hem RGB hemde ARGB ile ifade edilmektedir. Renk nesnesinin yaps aada ifade edilmitir. A- Alpha (Geirgenlik) deeri R- Rengi ifade eden Krmz bileen G- Rengi ifade eden Yeil bileen B- Rengi ifade eden Mavi bileen

26 Name- Bilinen renklerden ise ingilizce olarak ismi IsEmpty- Renk yaps oluturulup, deer atanmadnda true olarak deer tayan kontrol alan. IsKnownColor- Sistem tarafndan bilinen renklerden ise true deerini alr. IsNamedColor- Sistem tarafndan bilinen renkler listesinden alnd ise true deerini tar. IsSystemColor- Sistemin kendi renkleri tarafndan oluturuldu ise bu deer true deerini tar.

izelge 3.1 Sistem Renkleri

izelge 3.2 Named Colors.

Color objesini aadaki ekillerde oluturabiliriz. Color.FromArgb(<r>,<g>,<b>); Color.FromArgb(<a>,<baka bir color nesnesi>); Color.FromArgb(<a><r>,<g>,<b>); Colors.Red;

27 Oluturduumuz rengi bir referans ile izimlerde kullanabiliriz. 3.11 Kalemler (Pen) Pen nesnesi GDI+ n izimlerde kulland nesnedir. Basit izimler iinde karmak izimler iinde bize olanaklar salamaktadr. Kalnlk, izginin stili, izginin bitiinin ve balangcnn tipi ve ekli, izginin ierisinin nasl doldurulaca gibi opsiyonlar Pen nesnesi ile kontrol edilebilmektedir. 3.11.1 Standart Pen Nesneleri System.Drawing namespace inde kullanlmaya hazr standart Pen nesneleri vardr. Her sistem rengi iin bir Pen nesnesi oluturulmutur. rnek olarak siyah renkli kalem ile izim yapmak istersek Pens.Black eklinde bu kaleme ulaabiliriz. Pen Nesnesine Graphics.PageUnit ile ifade edilen unit ile belirtilen deerde kalnlk tanmlamak iin aadaki ekilde bir kullanm yaplabilir. Pen p=new Pen(Color.Red,5); // 5 birim kalnlndaki bir Pen nesnesi PageUnit den bamsz olarak bir piksel kalnlnda izgi izebilmek iin Pen nesnesini -1 kalnlk deeri ile oluturmak yeterlidir. Pen ile izilen izgiler basit bir izgiden te Brush nesnesi ile doldurulan karmak ekillerdir. izginin kalnlndan bamsz olarak her Pen nesnesinin izimini bir Brush nesnesi boyamakta, doldurmaktadr.

ekil 3.6 Standart pen ile izim.

28

Yukardaki ekilde grld gibi izgi kalnl arttkca izilen ekil dikdrtgene dnmektedir. Yani basit bir izgiden ziyade karmak bir ekil gibi izilmitir. Nesnenin nasl izileceini Pen nesnesi karar vermektedir.

ekil 3.7 Balang ve bitii deitirilmi izim rnei.

Yukardaki rnekte ise izginin biti ve balang alanlarn deitirdiimizde oluan grnt grlmektedir. Bu rnekte ise eklin karmakl artmtr. Balang ve biti ekillerinin yani balklarn Pen nesnesi ile izim yaparken ne kadar nemli olduu gstermek iin iki rnek kullanm aada gsterilmitir.

ekil 3.8 Standart pen ile zigzag izimi.

29 Yukardaki kullanmda Pen nesnesine balk verilmediinde izgilerin arasndaki boluklar grlmektedir.

ekil 3.9 Balang ve bitii deitirilmi pen ile zigzag.

Yalnz ayn izimler Pen nesnesine balk tanmlayarak yapldnda izgilerin arasndaki boluklar kaybolmaktadr. izilen ekillerden de anlalaca zere izilen izgiler basit noktalar btnnden ziyade karmak izimlerdir. izimler ekil olduklar iin Brush nesnesi ile yapabildiimiz tm boyamalar bu izgileri boyamak iinde kullanlabilmektedir. Brush nesnesi anlatlrken bu konuda rneklerde verilecektir. Balang grebilirsiz. protected override void OnPaint(PaintEventArgs e) { Pen p=new Pen(Color.Black,20); int y=20; foreach(string s in Enum.GetNames(typeof(System.Drawing.Drawing2D.LineCap))) ve biti balklarna ileride detayl olarak deineceiz standart olarak

kullanabileceklerimizin rnek kullanmlarn bir anlamda listesini aadaki kod blou ile

30 { p.StartCap=p.EndCap=(LineCap)Enum.Parse(typeof(System.Drawing.Drawing2D.LineCap),s); e.Graphics.DrawLine(p,30,y,230,y); e.Graphics.DrawString(s,Font,Brushes.Black,260,y-10,StringFormat.GenericTypographic); y+=40; } base.OnPaint(e); } rnek ekran kts aadadr.

ekil 3.10 LineCap rnekleri.

Pen nesnesi ayrca izimlerimizde kalemimizin bal ile ilgili deiikliklerde yapabileceimiz opsiyonlar sunmaktadr. DashStyle enumerasyonunda farkl kalem bal opsiyonlarn bulabiliriz. Bu opsiyonlar n kullanm rnei aadaki kod blounda gsterilmitir. protected override void OnPaint(PaintEventArgs e) {

31 Pen p=new Pen(Color.Black,10); int y=20; foreach(string s in Enum.GetNames(typeof(System.Drawing.Drawing2D.DashStyle))) { p.DashStyle=(DashStyle)Enum.Parse(typeof(DashStyle),s); e.Graphics.DrawLine(p,20,y,420,y); e.Graphics.DrawString(s,Font,Brushes.Black,440,y-10,StringFormat.GenericTypographic); y+=40; } base.OnPaint(e); }

Program blounun rnek kts aa gsterilmitir.

ekil 3.11 DashStyle rnekleri.

Pen nesnesi ile daha karmak kalem ular kullanabiliriz. Pen nesnesinin balk ksmn aadaki ekildeki kalem gibi dnrsek. U ksmdaki izim yapan alanlarn aralklarn tanmlayan noktalarda 0.0 0.2 0.3 0.6 0.7 1.0 eklinde olacak ekilde dnrsek. Aadaki ekildeki gibi bir tanmlama yapm oluruz.

32

ekil 3.12 Karmak Pen nesnesi gsterimi.

U ksmn kendi belirlediimiz bu kalem nesnesi ile standart izimler yaparsak ekran grntleri aadaki ekillerdeki gibi olmaktadr. Pen nesnesi ile yaplan izimler gerek hayattaki ekilleri izerken kullandmz kalemler gibi ekran ktlar vermektedir.

ekil 3.13 Karmak Pen nesnesi ile izilmi rnekler.

Yukardaki ekran grntsn yeni bir kalem nesnesi tanmlayarak ekrana basan program blou aadadr. protected override void OnPaint(PaintEventArgs e)

33 { Pen p=new Pen(Color.Black,20); p.CompoundArray=new float[]{ 0.0f, 0.2f, 0.3f, 0.6f, 0.7f, 1.0f}; e.Graphics.DrawRectangle(p,20,20,200,150); e.Graphics.DrawEllipse(p,20,200,200,150); base.OnPaint (e); }

3.11.24.12 Fralar (Brush) Dikdrtgen yada elips gibi kapal ekillerin ii bo izimleri Pen nesnesi ile ii dolu ekilleri Brush nesnesi ile boyanmaktadr. Bir baka ifade ile Brush nesnesi kapal ekilleri boyamaktadr. GDI+ birka eit Brush nesnesine sahiptir. Bu nesneler Brush snfndan tretilmitir yani Brush nesnesini kabul eden her metodda kullanlabilmektedir. Aadaki Brush larn eitleri gsterilmitir. Solid Brushes Hatch Brushes Texture Brushes Gradient Brushes

Aadaki ekilde ki dikdrtgen mavi renkli solid Brush ile elips ise hatch brush ile doldurulmutur.

34

ekil 3.14 Fra ile boyama rnekleri.

3.11.3 Tek Renkli Fralar - Solid Brush Kapal bir eklin iini boyayabilmek iin bir Graphics nesnesi ile Brush nesnesi gereklidir. Graphics nesnesi FillRectangle ve FillEllipse gibi metodlar barndrmaktadr. Brush nesnesi ise boyanacak renk ve boyama tipini belirlemektedir. Aadaki rnek ekran grntsnde grld gibi ii dolu ekil ile izgilerden oluan drdnc ekil SolidBrush sb=new SolidBrush(Color.Blue); eklinde oluturulan SolidBrush nesnesi ile boyanmtr.

ekil 3.15 Tek renkli fralar.

protected override void OnPaint(PaintEventArgs e) { SolidBrush sb=new SolidBrush(Color.Blue); e.Graphics.FillRectangle(sb,10,10,200,150); e.Graphics.FillEllipse(sb,220,10,200,150); e.Graphics.FillPolygon(sb,new Point[]{ new Point(110,160), new Point(10,310),

35 new Point(220,310) }); Pen p=new Pen(sb,10); e.Graphics.DrawLines(p,new Point[]{ new Point(360,160), new Point(230,310), new Point(430,310)}); p.Dispose(); sb.Dispose(); base.OnPaint (e); } 3.11.4 Desenli Fralar Hatch Brushes

Desenli fralar solid fralar gibi kapal alanlar boyamakta kullanlmaktadr. HatchBrush nesnesini olutururken bir desen tipi belirtmek gereklidir ayrca desenin rengi ile bir de arkataban rengi tanmlamak gerekir. Desenler 8x8 piksel boyutunda tanmlanm aralksz yerletirilebilir desenlerdir. Bu desenler aynen seramik karolar gibi yzeye yerletirilir. Desen tipleri aadaki ekilde listelenmitir.

36
izelge 3.3 HatchBrush stilleri.

Aadaki kod blou ile daha nceden solidBrush ile yaptmz rnei bu sefer HatchBrush kullanlacak ekilde deitirerek altrldnda ilgili nesnelerin ileri DiagonalBrick stilinde boyanmaktadr. protected override void OnPaint(PaintEventArgs e) { HatchBrush hb=new HatchBrush(HatchStyle.DiagonalBrick, Color.Gray, Color.Brown); e.Graphics.FillRectangle(hb,10,10,200,150); e.Graphics.FillEllipse(hb,220,10,200,150); e.Graphics.FillPolygon(hb,new Point[]{

37 new Point(110,160), new Point(10,310), new Point(220,310) }); Pen p=new Pen(hb,10); e.Graphics.DrawLines(p,new Point[]{ new Point(360,160), new Point(230,310), new Point(430,310)}); p.Dispose(); hb.Dispose(); base.OnPaint (e); }

Yukardaki kod blounun ekran kts.

ekil 3.16 Desenli Fralar

38 3.11.5 Dokuma Fralar Texture Brushes TextureBrush ile belirlediimiz bir resim datasn boyama ileminde kaplama olarak kullanmaktayz. rnekden de anlalaca zere TextureBrush boyanacak alanlarn tmn renk yerine Bitmap deseni ile doldurmaktadr. Dier fralar iin yaptmz izimlerde kullandmz fray aadaki ekilde TextureBrush deitirerek tekrar altrdmzda aadaki gibi bir ekran grnts elde ederiz. Image img=Image.FromFile("imagefile.bmp"); TextureBrush tb=new TextureBrush(img);

ekil 3.17 Texture Brushes

ekil 3.18 Texture resmi.

39 3.11.6 Derece Derece Deien Fralar - Gradient Brushes GradientBrush doldurduu alanlar derece derece bir renkden dierine deien ekilde boyamaktadr. ki tip GradientBrush vardr. Birincisi lineer olan. Bu fra ile birlikte yaplan boyamalarda renk deiimi bir ynden bir yne dorudur. Aadaki elips yatay ynde gradient boyanmtr.

ekil 3.19 Derece Derece Deien Fralar rn. 1

Gradient Brush nesnesi doldurduu alana gre de renk deitirebilmektedir. Aadaki ekilde PathGradient Brush ile boyanm bir elips grlmektedir.

ekil 3.20 Derece Derece Deien Fralar rn. 2

Dier fra tiplerinde kullandmz rnek zerinde GradientBrush kullandmzda aadaki gibi bir grnt elde edilmektedir.

40

ekil 3.21 Derece Derece Deien Fralar rn. 3

LinearGradientBrush hb = new LinearGradientBrush(new Rectangle(0, 0,100, 30), Color.Orange, Color.Red, 45);

41 4. GRAFK LEMLER N ALIMA ALANI TASARLAMAK Grafik ilemlerimizi yapabilmemiz iin gerek hayatta olduu gibi bir tuvale bir alma alanna ihtiyacmz var, o nedenle tm ilemlerimizi zerinde gerekletirebileceimiz bir alma alan bileeni tasarladm. alma alan ilenmekte olan grnty yaknlatrma, yaknlaan grntnn seviyede yaknlatrma ve uzaklatrma yaplabilmektedir. zerinde

gezinme gibi zellikleri desteklemektedir. GDI+ n destekledii zellikler sayesinde her

ekil 4.1 eitli yaknlatrma oranlar ve alma alan.

Ayrca fare ile ekranda imle hareketi ve tklama ile oluan koordinatlarn pozisyonlar da alma alanna doru bir ekilde evrilerek gerek hali ile iletilmektedir. 4.1 alma Alannn Tasarlanmas alma Alann bir dier ifadesi ile Tuvali programda kullanabilmek iin ve bileen - olay bazl programlama salayabilmek iin bir form kontrol oluturdum.

42 Kontrol direkt System.Windows.Forms.Control snfndan tretmek yerine ihtiyacm olan baz zellikleri hali hazrda barndran System.Windows.Forms.ScrollableControl kullandm. Aadaki kod blounda gsterildii gibi System, System.ComponentModel, System.Drawing, System.Drawing.Drawing2d ve System.Windows.Forms DLL lerini kullanarak yeni komponenti oluturuyorum. SetStyle fonksiyonu ile de double buffering kullanldnda kontroln buna msaade etmesini kesinletirmek iin ilgili deerleri kullandm. using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace SIR.Controls { public class Canvas : ScrollableControl { public Canvas() { this.SetStyle( ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw ,true); } } } Tuvalimizin temel zellii diyebileceimiz PageSize yani ekranda grnen alandan ziyade gerekte grnmesi gereken sanal sayfa boyutunu aadaki ekilde oluturdum. private Size _pageSize=new Size(640,480);

43 public Size PageSize { get{return _pageSize;} set{ _pageSize=value; OnPageSizeChanged(EventArgs.Empty); } } protected virtual void OnPageSizeChanged(EventArgs e) { if(PageSizeChanged!=null) PageSizeChanged(this,e); } public event EventHandler PageSizeChanged; OnPageSizeChanged ile ilgili detaylara daha sonradan tekrar deineceim. Komponenti tasarlarken birka eye dikkat ettim, sralamak gerekirse. Komponentin kulland baz bilgileri private deikenler olarak sakladm. Yalnz bu deikenlere accessor property ler tanmlayarak programlama zamannda deerlerini deitirip alabilmeyi saladm. Bylece ilgili alanlarn deerleri deitirildiinde yaplmas gereken ilemleri benim yerime komponent halletmi oldu. Ayrca komponentin ierisine bir EventHandler mekanizmasda yerletirdim, eer bu eventhandler set edilmise yaplmak istenilen ilemler bu tanmlanan eventhandler zerinden yaplabilecektir. 4.2 alma Alanna Scroll Bar Eklenmesi ve Ynetimi Tuval bileeni ScrollableControl den tredii iin AutoScrollMinSize zelliine sahiptir. Bu zellie atanan boyut ile scroll bar n gzkp gzkmeyeceine otomatik olarak karar vermektedir.

44 aadaki CalcScroll fonksiyonu her arldnda pagesize zerinden minimum scroll boyutunu ayarlamaktadr. void CalcScroll() { Size cs = new Size(this._pageSize.Width,this._pageSize.Height); this.AutoScrollMinSize=cs; Invalidate(); } Minimum Scroll boyutu birka durumda yeniden hesaplanmaldr. rnein PageSize deitiinde. protected virtual void OnPageSizeChanged(EventArgs e) { CalcScroll(); if(PageSizeChanged!=null) PageSizeChanged(this,e); }

Ve bileenin formda kaplad alan deitiinde. protected override void OnSizeChanged(EventArgs e) { CalcScroll(); base.OnSizeChanged(e); } 4.3 alma Alannn Ekrana izilmesi Tuval bileenin PageColor deikeni izimlerin yapld zeminin vermemektedir. rengini tutmaktadr.

ClipToPage deikeni ise true olarak deitirilir ise sayfa darsnda izime izin

45 private Color _pageColor=Color.White; public Color PageColor { get{return _pageColor;} set{ _pageColor=value; Invalidate(); } } private bool _clipToPage; public bool ClipToPage { get{return _clipToPage;} set{ _clipToPage=value; Invalidate(); } }

Bileeni olutururken SetStyle zelliine ControlStyles.UserPaint deerinide eklediimiz iin OnPaintBackground metodunu ak bir ekilde armamz gerekiyor aksi halde background u gremeyiz. Bileenin Paint metodu bir transformasyon matrisi ile Graphics nesnesini istenilen yere konumlandrmaktadr. Bir identity matrisi ve ClientSize oluturup PageSize dan hangi kenarlarnn byk olduunu kontrol ediyoruz. izim esnasnda nce arka planda tuvalin glgesi ve ardndan da tuvalin ayarlanm olan rengi ile kendisi iziliyor.

46 Eer ClipToPage true olarak ayarland ise graphics nesnesinin sadece grnen alan ierisindeki ksmlar boyamas yada izmesi syleniyor. Sonraki balklarda yaknlatrma olayn da ekleyerek kullandmz matris zerinde daha farkl kontroller de koyacam. protected override void OnPaint(PaintEventArgs e) { base.OnPaintBackground(e); Matrix mx=new Matrix(1,0,0,1,0,0); Size s=new Size(this.ClientSize.Width,this.ClientSize.Height); if(s.Width>PageSize.Width) mx.Translate((s.Width/2)-(_pageSize.Width/2),0); else mx.Translate((float)this.AutoScrollPosition.X,0); if(s.Height>PageSize.Height) mx.Translate(0,(s.Height/2)-(this._pageSize.Height/2)+(this.AutoScrollPosition.Y)); else mx.Translate(0,(float)this.AutoScrollPosition.Y); e.Graphics.Transform=mx; SolidBrush b=new SolidBrush(Color.FromArgb(64,Color.Black)); e.Graphics.FillRectangle(b,new Rectangle(new Point(20,20),PageSize)); b.Color=PageColor; e.Graphics.FillRectangle(b,new Rectangle(new Point(0,0),PageSize)); if(ClipToPage) e.Graphics.SetClip(new Rectangle(0,0,PageSize.Width,PageSize.Height));

47

base.OnPaint(e); }

Aadaki DoubleBuffer zellii true olarak deitirilir ise ekrann grafik izimlerinde st ste izimlerden kaynaklanan yanp snmeleri ortadan kalkacaktr, aksi halde false olarak deitirilir ise her yaplan izim bir yanp snme eklinde bir titremeye neden olacaktr. DoubleBuffer yaplarak btn izimler hafzada bir Bitmap e izilmekte ardndan tek bir seferde tm izim ekrana yanstlmaktadr, bu nedenle titreme grnts kaybolmaktadr. private bool _doubleBuffer; public bool DoubleBuffer { get{return _doubleBuffer;} set{ _doubleBuffer=value; if(value) { SetStyle(ControlStyles.DoubleBuffer,true); } else { SetStyle(ControlStyles.DoubleBuffer,false); } Invalidate(); } }

48 Buraya kadarki kodlarmz ile Tuvali herhangi formda kullanlabilir haldedir. Yalnz programda kullanabilmek iin birka eklenti ve deiiklik daha yapmak gerekmektedir.

ekil 4.2 alma alan rnek boyama.

Tuvalin alma alan zerinde gezinme zellikleri windows standartlar erevesinde eklendi, alma alannn yaknlatrma zelliini de eklemek gerekiyor. Yaknlatrma yapldnda eer ekranda gzkmesi gereken alan komponentin minimum scroll size deerinden byk ise scroll barlar ekilde grld gibi gzkmekte, minimum scroll size a eit yada daha kk olduunda ise gzkmemektedir. Ayrca Scroll Bar larn kaplad alan koordinat sisteminin deerlerini deitirmemektedir.

49

ekil 4.3 alma alanna scroll bar eklenmesi.

Scroll Bar lar hareket ettirildiinde transformasyon yntemi ile izimin yaplca orjin deitirilmekte, scroll dan dnen deger orjin deeri ile toplama ileminden geirilip orjinin hareket etmesini salmaktadr. 4.4 Transformasyonu leklendirmek System.Drawing ierisinde bulunan Matrix snf koordinatlar zerinde transformasyonlar ilemleri yapmak iin kullanlmaktadr. Yani herhangi bir dzlem zerindeki x,y noktlarn farkl bir yere konumlandrabilmektedir ve yeni bir x,y ifti oluturmaktadr. Zoom ileminde de biz basite ifadesi ile bu matrisleri kullanarak koordinatlar arparak geniletiyoruz, blelerek daraltyoruz, detaylarn ileride ifade ediceim. Aadaki rnekte olduu gibi ayn izimi kere ayn ekilde yapmamza ramen farkl lokasyonlarda farkl boyutlarda tane kare izildi. Bunun nedeni e.Graphics.Transform=mx; eklinde izimi yapan graphics nesnesinin matris tanmlamasn deitirmi olmamz. Matrisler birim matris iken yani mx=new Matrix(1f,0,0,1f,0,0); eklinde tanmlandnda hi bir transformasyon yapmamaktadrlar, varsaylan matrisde yukardaki tanmladmz deeri iermektedir.

50 private void DrawRect(Graphics g, Color c) { SolidBrush sb=new SolidBrush(c); g.FillRectangle(sb,10,10,100,100); sb.Dispose(); } private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Matrix mx=new Matrix(2f,0,0,2f,0,0); e.Graphics.Transform=mx; DrawRect(e.Graphics,Color.Red); mx=new Matrix(1f,0,0,1f,0,0); e.Graphics.Transform=mx; DrawRect(e.Graphics,Color.Green); mx=new Matrix(0.5f,0,0,0.5f,0,0); e.Graphics.Transform=mx; DrawRect(e.Graphics,Color.Blue); }

Yukardaki kodun ekran grnts aadaki ekildedir.

ekil 4.4 Transformasyonu leklendirmek

51 Yukardaki rnekten hareketle bizimde kendi tuval bileenimize yaknlatrma ve leklendirme zelliklerini kazandrabilmemiz iin baz eklentiler yapmamz gerekiyor. Bu balamda izim ilemi yaplmadan nce baz hesaplamalar yaplarak scroll bar lar da sanal sayfa boyutunda deiiklikler yaplmal ayrca yeni boyutlara gre sayfann gsterilecei orjin ve scrollbarlarn yeni pozisyonu ayarlanmaldr. Yaknlatrma seviyesini ayarlyacamz Zoom zelliini tanmlayalm. private float _zoom=1.0f; [Category("Behavior"), Description("Zoom Seviyesinin Carpani"), DefaultValue(1.0f)] public float Zoom { get{return _zoom;} set{ _zoom = value; // zoom negatif olamaz if(_zoom<0) _zoom=Math.Abs(_zoom); //zoom degeri kucuk olabilir ama sfr olamaz if(_zoom==0) _zoom=0.000001f; //scroll bar lar hesaplayan fonksiyon CalcScroll(); //bilesenin bulundugu formu bilgilendirmek icin OnZoomChanged(EventArgs.Empty); } }

Scroll bar hesaplamalarn deitirelim.

52 lk hali :

void CalcScroll() { Size cs = new Size(this._pageSize.Width,this._pageSize.Height); this.AutoScrollMinSize=cs; Invalidate(); } Yaknlatrma ve leklendirme zelliklerini eklediim hali: void CalcScroll() { Size cs = newSize((int)(this._pageSize.Width*_zoom),(int)(this._pageSize.Height*_zoom)); this.AutoScrollMinSize=cs; Invalidate(); }

Zoom zelliinin deeri deitiinde ardmz eventHandler i tanmlayalm. public event EventHandler ZoomChanged; protected virtual void OnZoomChanged(EventArgs e) { if(this.ZoomChanged!=null) ZoomChanged(this,e); Invalidate(); } 4.5 Onpaint Olay zerindeki Deiiklikler Onpaint olay izimlerin ekrana yansd metod olduu iin en nemli eklentileri burada yapmak gerekiyor. Yaknlatrma ve leklendirme zelliklerini eklemeden nce birim matris

53 ile alrken imdi bunun yerine Matrix mx=new Matrix(_zoom,0,0,_zoom,0,0); eklinde zoom deerlerini ieren bir matris kullanacaz. Bylece izimlerde yaknlatrma ilemleri otomatik olarak yaplacaktr. Ek olarak hesaplanmas gereken nemli bir detay daha var o da scrollposition deerini ve ekranda grnecek ksmlar hesaplayacamz boyut deerlerinin hesaplanmas. Size s=new Size((int)(this.ClientSize.Width*(1f/_zoom)),(int)(this.ClientSize.Height*(1f/_zoom))); Bu deiiklik ile s deikeni sanal sayfa boyutunu aadaki hesaplamalar yapabilmek iin doru bir ekilde iermektedir. if(s.Width>PageSize.Width) mx.Translate((s.Width/2)-(_pageSize.Width/2),0); else mx.Translate((float)this.AutoScrollPosition.X*(1f/_zoom),0); if(s.Height>PageSize.Height) mx.Translate(0,(s.Height/2)-(this._pageSize.Height/2)+(this.AutoScrollPosition.Y)); else mx.Translate(0,(float)this.AutoScrollPosition.Y*(1f/_zoom));

Bu yaplan deiiklikler ile Tuval bileenimiz izimler iin transformasyonlar otomatik olarak yapabilecek zelliklere sahip olmutur. Zoom zelliini test edebilmek iin aadaki gibi bir scroll bar kullanlabilecei gibi programda benim kullandm ekli ile bir combobox da kullanlabilir. Zoom deerini u ekilde atayabiliriz. private void trackBar1_Scroll(object sender, System.EventArgs e) {

54 this.canvas1.Zoom=0.025f*this.trackBar1.Value; }

rnek ekran grnts aadaki ekilde olacak.

ekil 4.5 alma alanna yaknlatrma zellii eklemek.

4.6 alma Alannn zellikleri alma alan zerinde fare imlecinin gerekte nerede olduunu anlamak iin imlecin bulunduu koordinat sanal alma alan koordinatlarna evirmemiz gerekmektedir. Aadaki resimde gsterildii gibi normal boyutu 1024x768 olan bir resime %200 yaknlatrma yapldnda fare imlecinin gerekte durduu nokta ile alma alan zerinde gerekte durduu koordinatlar farkl olacak. Resimdeki scrollbar greceli olarak ald pozisyon grlmektedir.

55

ekil 4.6 alma alanndaki sanal alma alannn aklamas.

4.7 Fare mlecinin Gerek ve Sanal Koordinatlarn Hesaplamak Tuval bileeni bir sayfay olutururken bir matrix oluturur ve izimlerini bunun zerinden yapar. Fare ile iletiime geen eventhandler larda doru koordinatlar elde etmek iin aadaki gibi bir koordinat deiimi yapmak gerekmektedir. Yaknlama ve leklendirme iin ayr hesaplamalar gerekiyor, izimin yaplaca orjin ona gre ayarlanmakta ve autoscrollposition deerleri eklenerek fare imlecinin sanal sayfa zerinde ki koordinatlarna Matrix snfnn salad fonksiyonlar ile ulalabilmektedir. Aadaki fonksiyonun ierii hesaplanan Point deikenini eventhandler ierisinde dndrd iin bu bileenin kullanld herhangi bir formda sanal sayfa zerinde ki koordinatlara ulalacaktr. Matrix mx=new Matrix(_zoom,0,0,_zoom,0,0); Size s=new Size((int)(this.ClientSize.Width*(1f/_zoom)), (int)(this.ClientSize.Height*(1f/_zoom))); if(s.Width>PageSize.Width) mx.Translate((s.Width/2)-(_pageSize.Width/2),0); else

56 mx.Translate((float)this.AutoScrollPosition.X*(1f/_zoom),0); if(s.Height>PageSize.Height) mx.Translate(0,(s.Height/2)-(this._pageSize.Height/2)+(this.AutoScrollPosition.Y)); else mx.Translate(0,(float)this.AutoScrollPosition.Y*(1f/_zoom)); mx.Invert(); Point[] px=new Point[]{new Point(e.X,e.Y)}; mx.TransformPoints(px);

Yukarda aklamasn yaptm imlecin sanal ve gerek koordinatlarnn dnm aada ilgili eventhandler lar ve yukardaki ilemleri yapan BacktrackMouse fonksiyonunun kullanm ile bulunmaktadr. protected virtual MouseEventArgs BacktrackMouse(MouseEventArgs e) { Matrix mx=new Matrix(_zoom,0,0,_zoom,0,0); Size s=new Size( (int)(this.ClientSize.Width*(1f/_zoom)), (int)(this.ClientSize.Height*(1f/_zoom))); if(s.Width>PageSize.Width) mx.Translate((s.Width/2)-(_pageSize.Width/2),0); else mx.Translate((float)this.AutoScrollPosition.X*(1f/_zoom),0); if(s.Height>PageSize.Height) mx.Translate(0,(s.Height/2)-(this._pageSize.Height/2)+ (this.AutoScrollPosition.Y)); else mx.Translate(0,(float)this.AutoScrollPosition.Y*(1f/_zoom));

57

mx.Invert(); Point[] px=new Point[]{new Point(e.X,e.Y)}; mx.TransformPoints(px); MouseEventArgs et=newMouseEventArgs(e.Button,e.Clicks,px[0].X,px[0].Y,e.Delta); return et; } protected override void OnMouseMove(MouseEventArgs e) { MouseEventArgs et=this.BacktrackMouse(e); base.OnMouseMove(et); } protected override void OnMouseUp(MouseEventArgs e) { MouseEventArgs et=this.BacktrackMouse(e); base.OnMouseUp(et); } protected override void OnMouseDown(MouseEventArgs e) { MouseEventArgs et=this.BacktrackMouse(e); base.OnMouseDown(et); }

58 4.8 Program Test Etmek Tuval programn test etmek iin aadaki komple kod bloklar kullanlabilir. Sonu olarak elde edilecek ekran grnts ise yledir.

ekil 4.7 alma alannn rnek ekran kts.

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace TestCanvas { public class Form1 : System.Windows.Forms.Form { ArrayList items=new ArrayList(); ArrayList line; private WellFormed.Canvas canvas1; private System.Windows.Forms.TrackBar trackBar1; private System.ComponentModel.Container components = null; public Form1()

59 { InitializeComponent(); } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code private void InitializeComponent() { this.canvas1 = new WellFormed.Canvas(); this.trackBar1 = new System.Windows.Forms.TrackBar(); ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit(); this.SuspendLayout(); // // canvas1

60 // this.canvas1.AutoScroll = true; this.canvas1.AutoScrollMinSize = new System.Drawing.Size(1600, 1200); this.canvas1.ClipToPage = true; this.canvas1.Dock = System.Windows.Forms.DockStyle.Fill; this.canvas1.DoubleBuffer = true; this.canvas1.Location = new System.Drawing.Point(0, 0); this.canvas1.Name = "canvas1"; this.canvas1.PageColor = System.Drawing.Color.White; this.canvas1.PageSize = new System.Drawing.Size(800, 600); this.canvas1.Size = new System.Drawing.Size(360, 334); this.canvas1.TabIndex = 0; this.canvas1.Text = "canvas1"; this.canvas1.Zoom = 2F; this.canvas1.MouseUp += newSystem.Windows.Forms.MouseEventHandler(this.canvas1_MouseUp); this.canvas1.Paint += newSystem.Windows.Forms.PaintEventHandler(this.canvas1_Paint); this.canvas1.MouseMove += newSystem.Windows.Forms.MouseEventHandler(this.canvas1_MouseMove); this.canvas1.MouseDown += newSystem.Windows.Forms.MouseEventHandler(this.canvas1_MouseDown); // // trackBar1

61 // this.trackBar1.Dock = System.Windows.Forms.DockStyle.Left; this.trackBar1.Location = new System.Drawing.Point(0, 0); this.trackBar1.Maximum = 100; this.trackBar1.Name = "trackBar1"; this.trackBar1.Orientation = System.Windows.Forms.Orientation.Vertical; this.trackBar1.Size = new System.Drawing.Size(45, 334); this.trackBar1.TabIndex = 1; this.trackBar1.Scroll += newSystem.EventHandler(this.trackBar1_Scroll); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(360, 334); this.Controls.Add(this.trackBar1); this.Controls.Add(this.canvas1); this.Name = "Form1"; this.Text = "Form1"; ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit(); this.ResumeLayout(false);

62 #endregion [STAThread] static void Main() { Application.Run(new Form1()); } bool _drawing; private void canvas1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { foreach(Point[] pa in items) { if(pa.Length>0) { if(pa.Length==1) { e.Graphics.DrawLine(Pens.Black,pa[0],pa[0]); } else e.Graphics.DrawLines(Pens.Black,pa); } } if(_drawing)

63 { if(line.Count>1) { Point[] pts=new Point[line.Count]; line.CopyTo(pts,0); e.Graphics.DrawLines(Pens.Black,pts); } } } private void trackBar1_Scroll(object sender, System.EventArgs e) { this.canvas1.Zoom=0.025f*this.trackBar1.Value; } private void canvas1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { _drawing=true; line=new ArrayList(); } private void canvas1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if(_drawing) { this.line.Add(new Point(e.X,e.Y)); this.canvas1.Invalidate(); } } private void canvas1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {

64 _drawing=false; line.Add(new Point(e.X,e.Y)); Point[] pts=new Point[line.Count]; line.CopyTo(pts,0); items.Add(pts); this.canvas1.Invalidate(); } } }

65 5. BLGSAYAR ORTAMINDA N DESEN TASARLAMAK

Bu balk altnda GDI+ edilecektir. 5.1 Program Hakknda

ve zelliklerinin akland blmlerde gsterilen yntemleri

kullanarak yazlan program ile bilgisayar ortamnda ini tasarmnn nasl yapld izah

Tez kapsamnda bilgisayar ortamnda ini tasarmn yapabilmek iin SIR adnda bir program yazld. Aada programn genel ekran grnts grlmektedir.

ekil 5.1 Program genel grnm.

Bu program ile 1.2 Geleneksel ini Tasarm Srecinde izah edilen ini yapm aamalarndan 1.2.9 Dekorlama(Tahrir ve Boya) ve 1.2.10 Tahrirleme aamalar bilgisayar ortamnda yaplabilmektedir.

66 SIR Program ile aadaki ekillerde gsterilen iniler gibi tasarmlar yaplabilmektedir. Bu tasarmlarn nasl yapld ileriki balklarda izah edilecektir. 5.2 Programn Bileenleri Program bir ana alma alan ve o alan zerinde ilem yapmak iin kullanlan yardmc alanlardan olumaktadr. Aadaki ekilde programn bileenleri numaralandrlmtr.

ekil 5.2 Program Bileenleri

Numaral bileenlerin aklamalar aada izah edilmitir. 5.2.1 alma Alan alma alan izimlerin yapld alandr. Fare ile yaplan ilemler seilen araca gre deimektedir. rnein desen seildiinde fare ile tklama desenleme ilemini

67 gerekletirmektedir. Silgi seili iken yaplan fare ile tklayarak srkleme silme ilemini gerekletirmektedir. 5.2.2 Desen Kutusu Desen kutusundan seilen desenler alma alanna izilmektedir. Seilen desen izilmeden nce fare imlecinin zerinde gzkmektedir. Bylece izim yapmadan nce izimin nasl grlecei belirlenmi olmaktadr. Farenin sol tuuna basldnda desen alma alanna izilmektedir. Program desenleri C:\SIR\Desenler altndaki klasr yapsna gre oluturmaktadr. Aadaki ekilde gsterildii zere program desen kutusunda iek ile balayan Tabaklar ile biten 6 adet grup altnda desenleri alfabetik olarak listeleyecektir. Yani programn kullanabilmesi iin desen eklemek gerektiinde istenilen program ile hazrlanm bir png dosyas aadaki dizinde istenilen ilgili yere yerletirildiinde program tarafndan tannacak ve kullanlabilir hale gelecektir. Desenleri png olarak seilmesinin zorunlu olmasnn nedeni desenlerin arka tabanlarnn geirgenliini salayabilmek iindir. Desenleri photoshop benzeri grafik programlar ile kayt ederken png opsiyonlarndan transparent seeni seilmeli ve ilgili desenin arka taban silinmelidir. Bylece desenler izilirken desen haricindeki alanlar da tasarma yansmam olacaktr.

ekil 5.3 Desen klasr

5.2.3 Desen Ara Kutusu Desen ara kutusu seilen desenin zelliklerini belirlemektedir. Bu zellikler ara kutusunun ierisinde srasyla u ekildedir :

68 Desen A : Desenin alma alanna hangi a ile yerletirileceini belirlemektedir. 0 dan 360 kadar deerler seme kutusundan seilerek desenin yerletirme as deitirilmektedir. A seme ilemi istenilirse a kutucuu seili iken farenin orta kaydrma tuu ile de yaplabilmektedir. Boyut : Desenin alma alanna izilirken hangi boyutta yerletirileceini belirleyen alandr. Desenin en byk kenarnn boyutunu belirlemeye yarar. Seili desen o oranda kltlerek o ekilde alma alanna izilir. Ayrca bu alana el ile de veri girii yaplabilmektedir. Bu alan zerinde istenilirse boyut kutucuu seili iken farenin orta kaydrma tuu ile de seim yaplabilmektedir Saydamlk : Seili desenin alma alanna izilirken saydam olarak izilebilmesini salar, seilen deer %0 ile %100 arasnda deimektedir. Yzde deeri ne kadar bykse desen o kadar grnr hale gelmektedir. Desenin Saydamlk deeri %0 iken desen grnmez %100 iken de tamam ile grnr olacaktr. Bu kutucuk seili iken de farenin orta tuu ile deerler arasnda gezinebilmek mmkndr. 5.2.4 alma Alan Seim Kutusu alma alan seim kutusunda Yaknlatrma ve l kutucuklar bulunmaktadr. Bu kutulardan yaknlatrma kutusu ile verilen deer orannda alma alan byk yada kk gsterilmektedir. %100 gerek boyutu ifade eder. %100 den kk deerler kltmeyi byk deerler ise byltmeyi salar. Byltme ve kltme ilemleri ile alma alannn yannda seilen desen, fra ve silgi gibi aralarda klmekte ve onlarn alma alanna olan etkileri o oranda deimektedir. Bylece gerek bir kltme ve byltme den ziyade byte ile yaknlatrma ilemi gereklemektedir. 5.2.5 Dokman Gemii Geri ve leri Al Tular Dokman gemii tular ile yaplan ilemleri geri alabilmek geri aldktan sonra geri alnan ilemlere de geri dnebilmek mmkndr. Bu mekanizmann nasl alt 6.5 Programn Kodlama Blmnde izah edilecektir.

69 5.2.6 Fra Ara Kutusu Fra ara kutusunda Fra boyutu ve Antialias var ile Antialias yok butonlar bulunmaktadr. 5.2.7 Silgi Ara Kutusu Silgi ara kutusunda silginin boyu ile ilgili ara seim kutusu bulunmaktadr. 5.2.8 Ara Seimi Ara seim kutusunda aadaki resimde gsterilen aralar bulunmaktadr.

ekil 5.4 Program ara seimi.

Ara seim kutusundan seilen ara alma alannda aktif hale gelmektedir. Ve seili aracn fonksiyonlar geerli olmaktadr. 5.2.9 Programn Kullanl SIR program aracl ile ini deseni tasarm aadaki admlarla yaplmaktadr. i) Tasarmn yaplaca alann byklnn belirlenmesi. ii) Tasarmn nasl bir nesnenin zerine yaplacann belirlenmesi. iii) Tasarm oluturacak nesnelerin (desenlerin) programn desenleri saklad alanda ilgili grubun altna daha nceden yklenmesi. iv) Tasarmn program aracl ile gerekletirilmesi. Yukardaki admlarla gerekletirilen bir tasarma rnek olarak aadaki aklamalar gsterilebilir.

70 Tasarm yapacamz cismin 1500 piksellik bir apa sahip tabak olduunu dnelim. Bu taban zerine ileyeceimiz desenleri daha nceden ilgili klasrler altnda C:\SIR\Desenler altna yklediimizi varsayalm. Yklenen desenlerin png olmas ayrca arka tabanlarnn geirgen olmas gerekmektedir. Yeni bir tasarm amak iin program mensnden yeni seenei seilir.

ekil 5.5 Program mens

Yeni tasarmn zelliklerinin belirlendii ekrandan belirlediimiz boyut girilir. Bu rnek iin boyutumuz 1500x1500 dr.

ekil 5.6 Yeni dkman mens

Genilik ve Ykseklik deerlerini girip Tamam tuuna bastmzda belirttiimiz boyutlardaki bir alma alan ekrana gelecektir.

71 Bu rnekte almamz bir tabak zerinde gerekletireceimiz iin desenler sekmesinden daha nceden yklenmi olan tabaklar desen sekmesinden Tabak (D Dolu).png yi seiyoruz.

ekil 5.7 Tabak desenleri mens

ve alma alanna deseni yerletirmeden nce desenin boyutunu boyut kutusundan 1500 olarak deitiriyoruz.

ekil 5.8 Desen boyutu seimi.

Sonrasnda ara kutusundan desen aracn seiyoruz.

ekil 5.9 Desen aracnn seimi.

72 Sonra tabak desenini alma alanna daha rahat yerletirebilmek iin yaknlatrma kutusundan alma alannn grnn kltp. Deseni alma alanna dzgn bir ekilde yerletiriyoruz.

ekil 5.10 Yaklatrma deerinin deitirilmesi.

ekil 5.11 Tabak deseninin yerletirilmesi

Sonra tabamza hazr olan d sslemelerden bir halka ve bir i halka izerek ierisini sslyoruz.

73

ekil 5.12 Tabak d deseni yerletirilmesi.

eride kalan bo alana yaplacak olan sslemeye gre desenleri ykledikten sonra. Sslemelere devam ediyoruz. rnein desenlerden hatai yaprak desenini seerek tabamz ortasna yerletiriyoruz.

74

ekil 5.13 Desen rnekleri

ekil 5.14 Hatai yaprak deseni yerletirilmesi

Sonra Lale Sap1 deseni ile bir krmz lale ekliyoruz.

75

ekil 5.15 Lale deseni yerletirilmesi.

Bu ekilde sslemelere devam ederek aadaki gibi bir sonuca ulayoruz.

ekil 5.16 Tasarmn programda bitmi hali.

76

ekil 5.17 Tasarm rnei.

Yaptmz tasarm aadaki menden istediimiz isim ile bmp formatnda kayt edebiliriz.

ekil 5.18 Tasarmn kayt edilmesi.

77 Ayn desenleri kullanarak aadaki ekilde bir tasarmda gerekletirebiliriz. Bylece ayn desen ktphanesi ile farkl ini rneklerini grmek mmkn olmaktadr.

ekil 5.19 Ayn desenler ile farkl bir tasarm rnei.

5.2.10 Programda Desen Kavram SIR Programndaki desenler photoshop benzeri grnt ileme programlar ile elde edilmi birbirinden bamsz ini desenleridir. PNG formatnda kayt edilen bu resimler istenirse eskiz olarak yani renksiz olarak istenirse gerek ini desenlerinden alnan grntler ile renkli ve gerek boyamalarla olabilir. Yada tamamen verktre izimlere dayanan taslak izimler elde etmekde mmkndr.

78 Desenler kullanlarak izilen iniler eitim amal, tasarm amal yada eskiz oluturup kada bastrma amal olarak kullanlabilir. Desenler kullanclarn kendi ktphaneleridir. Kullanclar elde ettikleri resimleri ileyerek yada kendileri izerek desen ktphanelerini geniletebilirler. Onlar klasr yaps altnda snflandrarak kullanmn kolaylatrabilirler. Sonraki izimleri iin mevcut desenlerden yeni desenler oluturabilirler. 5.2.11 Programa Eklenilecek Dier zellikler SIR Programna ileride eklenilecek zellikler unlardr: Desenlerin program ierisinde bir ara ile oluturulabilmesi. Desenlerin karmndan yeni desenlerin oluturulmas. Bask nizleme ve Yazc kts ile ilgili ilemleri ynetebilme. Gemi ynetiminde desen aralarnn altnda thumbnail olarak gemi resim bilgilerini grebilme. Limitsiz gemi bilgisi saklayabilme u anda 10 adet gemi bilgisi saklanmaktadr. Fra ve kalem iin iyiletirmeler yaparak antialias ekleme. Kes yaptr fonksiyonu ekleme. Yumuatma ,keskinletirme vs. gibi efektler ekleme. Eskiz halindeki desenleri boyayabilme. Ksayol tular ile program kullanmn daha ok kullanc dostu haline getirme.

79 6. PROGRAMIN YAZILIM TEKNOLOJLER SIR Program .NET teknolojisi ile GDI+ ktphanesini kullanarak C# dili ile yazlmtr. ki projeden olumaktadr. Birincisi 5. GRAFK LEMLER N ALIMA ALANI TASARLAMAK da akland zere alma alan ile ilgili ilemlerin programland proje, dieri ise SIR isimli programn projesidir. SIR program alma alan zerinde yaplan ilemleri alma alanna izim emirleri olarak gndermektedir. alma alan proje ismi ile Canvas bir bileen olarak SIR projesinde yer almaktadr. alma alannn OnPaint olayn izimin son hali canvasa izilmektedir. Canvas da ilgili izimi belirtilen yaknlatrma orannda ekranda gstermektedir. SIR program izimden alma alan ise gsterimden sorumludur denebilir. Bylece izim ilemleri gereki nesnelere ayrtrlarak yazlmn modler olmas salanmtr. Programn snf diagram aadaki ekilde gsterilmitir.

ekil 6.1 SIR Program snf diyagram.

80 6.1 izim Aralar Programda alma alan zerinde ilem yapabilen nesneler ITool interface inden tretilmilerdir.

public interface ITool { String GetProcessDescription(); Bitmap MouseDown(Image img, Point pt); Bitmap MouseMove(Canvas canvas, Image img, Point p1, Point p2,bool isMousePressed); }

ITool interface inden tretilen her nesne tanmlanan fonksiyonlar implemente etmek mecburiyetindedir. rnein DesenTool snf aadaki ekilde MouseDown fonksiyonunu implemente etmitir.

public Bitmap MouseDown(Image img, Point pt) { Bitmap bmp = (Bitmap)img; Graphics g = Graphics.FromImage(bmp); Rectangle rect = new Rectangle(pt.X - Convert.ToInt16(DesenBitmap.Width / 2), pt.Y - Convert.ToInt16(DesenBitmap.Height / 2), DesenBitmap.Width, DesenBitmap.Height); using (ImageAttributes attrs = new ImageAttributes()) { ColorMatrix colorMatrix = new ColorMatrix( new float[][] {

81 new float[] {1, 0, 0, 0, 0}, new float[] {0, 1, 0, 0, 0}, new float[] {0, 0, 1, 0, 0}, new float[] {0, 0, 0, DesenSaydamlik, 0}, new float[] {0, 0, 0, 0, 1} }); attrs.SetColorMatrix(colorMatrix); g.DrawImage(DesenBitmap, rect, 0, 0, DesenBitmap.Width, DesenBitmap.Height, GraphicsUnit.Pixel, attrs); } return bmp; }

Her aracn bu Itool arayznn salad metodlar salamas sayesinde seilen ara ne olursa olsun SIR program sadece MouseDown MouseMove vs. metodlarn armaktadr. Ve arlan snf kendi ilemini alma alan zerinde gerekletirmektedir. Bu modler bir programlama yntemidir. Bu sayede farkl bir ara eklenmek istndiinde tek yaplmas gereken bu arayz implemente ederek kaynak koda eklemektir, ek bir dzenlemeye gerek yoktur. 6.2 History Manager HistoryManager snf alma alannda yaplan ilemlerin gemiini tutmaktadr. Static bir snftr, bylece bu snfdan bir nesne oluturmadan bu snfn zellik ve metodlarna eriilebilmektedir. Ayrca bu snftan sadece bir tane nesne oluturulduundan da emin olunmaktadr. HistoryManager snfnn zellik ve Metodlar aada listelenmitir. Bu snf ierisinde ka tane kayt tutulaca snf ierisinde tanmlanmtr. HistoryManager ierisinde belirtilen rakam HistoryItem snf tutmaktadr. Temel metodlar Pop ve Push dur. Push metodu yeni bir HistoryItem kayd eklerken Pop bir nce eklenen kayd geri dndrmektedir. Redo ise geri dndrme ilemi yapldktan sonra ileri alma ilemini yapmaktadr.

82

ekil 6.2 HistoryManager snf.

HistoryItem snf ierisinde srasyla alma Alan resimi, ilem aklamas, alma alan thumbnail resmi, ve ekleme tarihini tutmaktadr. Bu deer HistoryManager a kayt ekleyip alnrken salanmaktadr. Bylece gemi kaytlar farkl bir bileen ierisinde grsel olarak da gsterilebilir.

ekil 6.3 HistoryItem snf.

83 7. SONU VE NERLER

Tez kapsamnda ini tasarmn kolaylatrmak iin yazlan SIR isimli program aracl ile varolan ini desenlerini kullanarak yeni desenler oluturulabilmektedir. Bu program ticari amalarla kullanlabilecei gibi ini tasarm rencileri iinde bir kaynak niteliindedir. SIR program ak kaynak kodludur, eklentilere aktr. leriye dnk olarak baka almalara kaynaklk edebilir. SIR program sadece ini tasarlamak iin deil, grafik zerine ilem yaplmas gereken baka ilerde de kullanlabilir. Grnt ileme, grafik manplasyonu ve izimleri gibi ilemlerde temel bir framework grevi grecek ekilde yazlm bir uygulamadr. Desen ktphanesinin geleneksel desenler ile zenginlemesi ile birlikte program desenlerin kolayca eriilip kullanlabilecei bir kaynak olacaktr.

84 KAYNAKLAR DZN [1] Mahesh Chand, 2003, Graphics Programming with GDI+ , Addison Wesley, 784 p [2] http://www.codeproject.com/KB/GDI-plus/floodfillincsharp.aspx [3] http://en.csharp-online.net/GDIplus_Graphics_TransformationScaling_Colors [4] http://www.turkishtileart.com/turkish/cini_hakkinda.htm [5] http://www.codeproject.com/KB/GDI-plus/GDI_.aspx [6] http://msdn.microsoft.com/en-us/library/ms533802(VS.85).aspx [7] Eric White, 2005, Pro .NET 2.0 Graphics Programming: From Professional to Expert , APRESS, 472 p [8] Iulian Serban, Dragos Brezoi, Tiberiu Radu, Adam Ward, 2006, GDI+ Custom Controls with Visual C# 2005, Packt Publishing Limited, 276 p [9] Nick Symmonds, 2002, GDI+ Programming in C# and VB.NET, a xpress

You might also like