görsel programlama
Transkript
görsel programlama
" " " " " " GÖRSEL PROGRAMLAMA (BİP215) Yazar: Doç.Dr.Ümit Kocabıçak S1 " " " BİP215-H13-1 " SAKARYA ÜNİVERSİTESİ Adapazarı Meslek Yüksekokulu Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi’ne aittir. "Uzaktan Öğretim" tekniğine uygun olarak hazırlanan bu ders içeriğinin bütün hakları saklıdır. İlgili kuruluştan izin almadan ders içeriğinin tümü ya da bölümleri mekanik, elektronik, fotokopi, manyetik kay ıt veya başka şekillerde çoğaltılamaz, basılamaz ve dağıtılamaz. Copyright © 2004 by Sakarya University All rights reserved No part of this course content may be reproduced or stored in a retrieval system, or transmitted in any form or by any means mechanical, electronic, photocopy, magnetic, tape or otherwise, without permission in writing from the University. Sürüm 1 Sakarya........ 2004 S 1 BİP215-H13-1 GRAFİKLER VE ANİMASYON Bu Haftanın H e d e fi: Grafiklerin öğretilmesi. Bu Haftanın Materyalleri Bu haftaki dersimizde kullanacağımız bir materyal bulunmamaktadır. Kullanılan semboller Animasyon Soru Veritabanı Bağlantılı Soru Simülasyon Püf Noktası 1 BİP215-H13-1 Grafikler Grafik yöntemleri, eski versiyonlara göre daha da iyileştirilmiş olan GDI+ (Graphical Device Interface) Grafik Arayüzü ile sağlanmaktadır. Grafik yöntemleri, .NET Framework'deki System.Drawing sınıfı altında desteklenmektedir. Visual Basic .NET'te grafik nesnelerle çizim aşamaları aşağıdaki gibi sıralanabilir : • • • • Grafik nesnesinin oluşturulması Pen (Kalem) ve Brush (Fırça) nesnelerinin oluşturulması Çizim yöntemleri ile grafikleri çizmek Çizim bittikten sonra Pen, Brush ve Grafik nesnelerini bellekten Dispose yöntemiyle temizlemek. Çizim işlemi aslında kağıda çizmeye çok benzer. Çizim için ilk önce bir kağıt alırız. Bu grafik nesnesidir. Kağıda kalem (Pen) ile çizeriz, boya kalemleri veya fırça (Brush) ile boyarız. İşimiz bitince, malzemelerimizi uzaklaştırırız. G rafik Nesnesinin Oluşturulması Çizim fonksiyonları grafik nesnelerine uygulanır. Grafik nesneleri çizim yöntemleri için bir yüzey sağlar. Bu, Visual Basic .NET'te 2 adımda oluşturulur.Birinci adımda Drawing namespace'sındaki örneğin Grafik isimli nesne Dim deyimi kullanılarak aşağıdaki şekilde deklare edilir. Dim Grafik As Drawing.Graphics İkinci adımda grafik nesnesi oluşturulacaktır.Bunun için CreateGraphics metodundan yararlanılır. Grafik nesnesi Visual Basic .NET iki kontrol kullanılarak oluşturulabilir. Form veya PictureBox kontrolu. Form için Grafik = Me.CreateGraphics() PictureBox Kontrolu (PicGraf1 isimli) İçin PicGraf1.CreateGraphics() Grafik = Grafik nesnesi oluşturulduktan sonra, tüm grafik yöntemleri bu nesneye uygulanabilir. İşi bitip kullanılmayacak grafik nesneleri, Dispose yöntemiyle sistem kaynaklarından silinir : Grafik.Dispose() 2 BİP215-H13-1 Pen (Kalem) Nesnesinin Oluşturulması Grafik yöntemlerinin birçoğu Pen (Kalem) nesnesine gereksinim duyar. Pen (Kalem) nesnesinin rengi ve çizgi kalınlığı seçilebilir. Eğer kendi Pen nesnemizi oluşturmak istersek, (örneğin Kalem isimli) deklarasyon ve tanımlama aşağıdaki gibi olmalıdır : Dim Kalem As Drawing.Pen Kalem = New Drawing.Pen (Renk, Çizgi Kalınlığı) Veya tek satırda; Dim Kalem As New Pen (Renk, Çizgi Kalınlığı) Brush (Fırça) Nesnesinin Olu şturulması Visual Basic .NET'te bölgelerin belirli renk, desen ve resimlerle doldurulmas ı için Brush (Fırça) nesnesinden yararlanılır.Eğer kendi Brush nesnemizi (örneğin Firca isimli) oluşturmak istersek, tanımlama aşağıdaki gibi olmalıdır : Dim Firca As New SolidBrush (Renk) Burada Renk, boyama rengini göstermektedir. Örneğin kırmızı için buraya Color.Red yazılır. Program içinde Brush nesnesinin Renk özelliği değiştirilebilir. Firca.Color = Yeni_Renk Brush nesnesi ile çizim yapıldıktan sonra, nesne Dispose yöntemi ile bellekten silinir. Firca.Dispose() Colors (Renkler) Color farklı renkleri göstermek için kullanılır. Pen ve Brush nesnelerinde renkleri tanımlamak için kullanılır.Tanımı (Renk değişkeni için): Dim Renk As Color Bu değişkene system tarafından tanımlanmış renkleri atamak için Renk = Color.Blue "Mavi" 3 BİP215-H13-1 Renk = Color.Red "Kırmızı" İfadeleri kullanılır Grafik Yöntemleri Formun genişliğini daha önceden gördüğümüz gibi Width özelliği ile, yüksekliğini Height özelliği ile belirliyorduk. Bu genişlik ve yükseklik, formun başlık kısmı ile çerçeveyi de içine alıyordu. Grafik çizilecek alanı belirleyecek genişlik ClientRectangle.Width özelliği ile, yükseklik ise ClientRectangle.Height özelliği ile tam olarak belirlenir. Grafiklerde noktalar (X, Y) koordinat çifti ile belirlenir. Grafik çizilecek alanın sol üst köşenin koordinatı (0, 0)'dır. Koordiantların 0'dan başlaması sebebiyle, ClientRectangle.Width ve ClientRectangle.Height elde edilen genişlik ve yükseklik değerlerinin grafik alanın dışına çıkmaması için birer eksiltilmesi (yani CientRectangle.Width - 1, ClientRectangle.Height - 1) gerekir. Bütün ölçüler tamsayı ve pikseldir. Draw Line Y ö n temi (Çizgi Ç izmek) Bu grafik yöntemi iki nokta arasında çizgi çizmek için kullanılır. Bu yöntemin yazılımı (Grafik Graphics nesnesini ve Kalem Pen nesnesini göstermektedir); Grafik.DrawLine (Kalem, x1, y1, x2, y2) (X1,Y1) : Çizilecek doğrunun başlangıç noktası (X2,Y2) : Çizilecek doğrunun bitiş noktası 4 BİP215-H13-1 Draw Rectangle Y ö n temi (Dikdörtgen Çizmek) DrawRectangle yöntemi, bir grafik nesnesi içinde dikdörtgen çizmek için kullanılır. Bu yöntemin yazılımı (Grafik Graphics nesnesini ve Kalem Pen nesnesini göstermektedir) aşağıdaki şekildedir : Grafik.DrawRectangle (Kalem, x, y, Genişlik, Yükseklik) FillRectangle Yöntemi (İçi Dolu Dikdö rtgen Ç izmek) FillRectangle yöntemi, bir grafik nesnesi içinde içi dolu dikdörtgen çizmek için kullanılır. Dikdörtgenin içini doldurmak için, Brush (Fırça) nesnesinden yararlanılır. Bu yöntemin yazılımı (Grafik Graphics nesnesini ve Firca Brush nesnesini göstermektedir) aşağıdaki şekildedir : Grafik.FillRectangle (Firca, x, y, Genişlik, Yükseklik) Draw Ellipse Y öntemi (Elips/Daire Çizmek) DrawEllipse yöntemi, bir grafik nesnesi içinde elips/daire çizmek için kullanılır. Bu yöntem dikdörtgen çizmeye çok benzerdir. Tanımlanan dikdörtgen içine elips/daire çizilir. Bu yöntemin yazılımı (Grafik Graphics nesnesini ve Kalem Pen nesnesini göstermektedir) aşağıdaki şekildedir; Grafik.DrawEllipse (Kalem, x, y, Genişlik, Yükseklik) FillE l l ipse Y ö n temi (İçi Dolu Elips/Daire Ç izmek) FillEllipse yöntemi, bir grafik nesnesi içinde içi dolu elips/daire çizmek için kullan ılır. İçi dolu dikdörtgen çizme yöntemine çok benzer. Elipsin içini doldurmak için, Brush (F ırça) nesnesinden 5 BİP215-H13-1 yararlanılır. Bu yöntemin yazılımı (Grafik Graphics nesnesini ve Firca Brush nesnesini göstermektedir) aşağıdaki şekildedir : Grafik.FillEllipse (Firca, x, y, Genişlik, Yükseklik) DrawPie Yöntemi (Elips/Daire Dil imi Ç iz mek) DrawPie yöntemi, bir grafik nesnesi içinde bir elips/dairenin belli bir dilimini çizmek için kullanılır. Tanımlanan dikdörtgen içine elips/daire dilimi çizilir. Bu yöntemin yazılımı (Grafik nesnesini ve Kalem Graphics Pen nesnesini göstermektedir) aşağıdaki şekildedir : Grafik.DrawPie (Kalem, x, y, Genişlik, Yükseklik, Başlangıç Açısı, Süpürme Açısı) FillPie Y ö n t e mi (İç i Dolu Elips/Daire Dilimi Ç izmek) FillPie yöntemi, bir grafik nesnesi içinde içi dolu elips/daire dilimi çizmek için kullanılır. İçi dolu dikdörtgen veya elips çizme yöntemine çok benzer. Dilimin içini doldurmak için, Brush (Fırça) nesnesinden yararlanılır. Bu yöntemin yazılımı (Grafik Graphics nesnesini ve Firca Brush nesnesini göstermektedir) aşağıdaki şekildedir : Grafik.FillPie (Firca, x, y, Genişlik, Yükseklik, Başlangıç Açısı, Süpürme Açısı) Draw A rc Y ö n temi (Elips/Daire Y ay Parçası Ç iz mek) DrawArc yöntemi, bir grafik nesnesi içinde bir elips/dairenin belli bir parçasını çizmek için kullanılır. DrawPie yöntemi ile aynı özelliklere sahiptir. Bu yöntemin yazılımı (Grafik Kalem Graphics nesnesini ve Pen nesnesini göstermektedir) aşağıdaki şekildedir : Grafik.DrawArc (Kalem, x, y, Genişlik, Yükseklik, Başlangıç Açısı, Süpürme Açısı) Point (No kta) Grafik yöntemleri, doğru ve eğrileri çizerken noktaları kullanır. Point (Nokta) tanımlaması aşağıdaki gibi yapılır : Dim Nokta As New Drawing.Point (X,Y) Burada X,Y piksel olarak istenilen koordinatlardır. Gerektiğinde program içinde özellikler değiştirilebilir. Point.X = Yeni_X : Point.Y = Yeni_Y Point yapıları dizi olarak da tanımlanabilir. Örneğin 20 elemanlı bir nokta dizisi tanımlamak için, 6 BİP215-H13-1 Dim P (30) As Drawing.Point Yazılır. Dizinin 12. elemanının koordinatlarını değiştirmek için, aşağıdaki ifadeler yazılmalıdır. P(12).X = Yeni_X : P(12).Y = Yeni_Y Draw Lines Yöntemi (Çizgiler Çiz mek) DrawLine yöntemi ile iki nokta arasında çizgi çiziliyordu. DrawLines yöntemi ile ise nokt dizisi kullanılarak, birden fazla çizgi aynı anda çizilebiliyor. Bu yöntemin yazılımı (Grafik nesnesini , Kalem Graphics Pen nesnesini ve Noktalar ise Point dizisini göstermektedir); Grafik.DrawLines (Kalem, Noktalar) DrawPolygon Y öntemi (Çokgen Çiz mek) DrawPolygon yöntemi DrawLines yöntemine çok benzer. İkisi de nokta dizisi kullanarak, noktaları birbirine bağlayarak çizgi çiziyorlar. Aralarındaki tek fark, DrawPolygon yöntemi, son nokta ile ilk noktayı birleştirerek kapalı bir çokgen elde ediyor. Bu yöntemin yazılımı (Grafik nesnesini , Kalem Graphics Pen nesnesini ve Noktalar ise Point dizisini göstermektedir); Grafik.DrawPolygon (Kalem, Noktalar) FillPolygon Yöntemi (İçi Dolu Çokgen Çizmek) FillPolygon yöntemi içi dolu çokgen çizmek için kullanılır. Bu yöntemin yazılımı (Grafik nesnesini , Firca Graphics Brush nesnesini ve Noktalar ise Point dizisini göstermektedir); Grafik.FillPolygon (Firca, Noktalar) Draw Curve Y öntemi (Eğri Çiz mek) DrawLines yöntemi ile ise nokta dizisi kullanılarak, birden fazla çizgi aynı anda çizilebiliyordu. Benzer şekilde DrawCurve yöntemi de nokta dizisini kullanarak çizim gerçekleştiriyor. Bu yöntemin DrawLines yönteminden farklı tarafı, noktaları doğrularla değil, Spline eğrilerle birleştirmektedir. Bu yöntemin yazılımı (Grafik Graphics nesnesini , Kalem Pen nesnesini ve Noktalar ise Point dizisini göstermektedir). Draw ClosedCurve Y öntemi (Kapalı Eğriler Ç iz mek) Bu yöntem DrawCurve yöntemine çok benzer. Tek farkı, son nokta ile ilk noktayı da birleştirerek, kapalı bir eğri elde edilmesidir. Bu yöntemin yazılımı (Grafik Graphics nesnesini , Kalem Pen nesnesini ve Noktalar ise Point dizisini göstermektedir); 7 BİP215-H13-1 Grafik.DrawClosedCurve (Kalem, Noktalar) FillClosedCurve Y ö n temi (İçi Dolu Kapal ı Eğri Ç iz m e k) Bu yöntem ile içi dolu kapalı eğriler çizilir. Bu yöntemin yazılımı (Grafik Graphics nesnesini , Firca Brush nesnesini ve Noktalar ise Point dizisini göstermektedir); Grafik.FillClosedCurve (Firca, Noktalar) Draw Bezier Y ö n temi (Bezier Eğr isi Ç izmek DrawBezier yöntemi ile Bezier eğrisi çizilir. Bezier egrileri, aşağıdaki şekilde gösterildigi gibi, dört noktayla tanımlanırlar. Eğri birinci (P0) ve son noktadan (P3) geçmekte, ikinci (P 1) ve üçüncü (P2) noktaları eğrinin kontrol edilmesini sağlamaktadır. Bu yöntemin yazılımı (Grafik Graphics nesnesini , Kalem Pen nesnesini ve Noktalar ise Point dizisini göstermektedir); Grafik.DrawBezier (Kalem, Noktalar) HatchBrush Nesnesi (Bölgeyi Belli Bir Desenle Doldurmak) Şu ana kadar Brush ile yapılan boyalamalar/doldurmalar, SolidBrush nesnesi ile tek renk ile gerçekleştirildi. HatchBrush nesnesi ile bölgeyi değişik desenlerle doldurmak mümkündür.SolidBrush dışındaki Brush nesneleri Drawing.Drawing2D namesapase'nın bir parçasıdır. Bu yöntemin yazılımı; Drawing.Drawing2D.HatchBrush (Tarama Stili, Tarama Rengi, Zemin Rengi) Burada Tarama stili için Visual Basic .NET tarafından belirlenmiş stillerden biri seçilebilir. Aşağıda tarama stillerinden bazıları listelenmiştir : Cross DiagonalBrick DiagonalCross HorizantalBrick LargeConfetti LargeGrid OutlineDiamond Plaid Shingle SolidDiamond Sphere Trellis Vertical Wave ZigZag Tarama Rengi ve Zemin Rengi için Color nesnesinde anlatılan renk tanımlamaları yapılır. 8 BİP215-H13-1 LinearGradientBrush Nesnesi (Bölgeyi İki Rengin Karşımı İle Doldurmak) LinearGradientBrush nesnesi ile bölge iki değişik rengin karşımı ile doldurulur..Bu nesne de Drawing.Drawing2D namesapase'nın bir parçasıdır. Bu yöntemin yazılımı; Drawing.Drawing2D.LinearGradientBrush (Dikdörtgen, 1. Renk, 2. Renk, LinearGradientMode) Burada Dikdörtgen, eğimin başladığı ve bittiği bölgeyi tanımlamayaı sağlar. LinearGradientMode ise eğim yönünü belirtmektedir. 4 değeri vardır : BackwardDiagonal ForwardDiagonal Horizontal Vertical TextureBrush Nesnesi (Bölgeyi Belli Bir Resimle Doldurmak) TextureBrush nesnesi ile bölgeyi değişik image'larla (resim) doldurmak mümkündür. SolidBrush dışındaki Brush nesneleri Drawing.Drawing2D namesapase'nın bir parçasıdır. Bu yöntemin yazılımı; Drawing.Drawing2D.TextureBrush (Resim) Draw String Y ö n t emi (G ra fik Nesnesine Y azı Y azmak) DrawString yöntemi ile grafik nesnelerine yazı yazılır. Grafiklere etiketler ve başlıklar eklemek için oldukça faydalı bir yöntemdir. Bu yöntemin yazılımı (Grafik nesnesini ve Yazi_tipi Graphics nesnesini , Firca Brush Font nesnesini göstermektedir); Grafik.DrawString (Yazilacak_ifade, Yazi_tipi, Firca, X, Y) Burada X, Y koordinatları yazının başlangıç koordinatlarının sol üst köşesini belirlemektedir. Draw I mage Y ö n temi (Resim Ç iz d irir) DrawImage yöntemi ile herhangi bir resim dosyasını grafik ortamda kullanmak için kullanılır. Özellikle animasyon ve oyun programlarında çok kullanılır. Bu yöntemin yazılımı (Grafik Graphics nesnesini ); Grafik.DrawImage (Resim_dosyasi, , x, y, Genişlik, Yükseklik) Burada X, Y koordinatları resmin başlangıç koordinatlarının sol üst köşesini belirlemektedir. Image nesnesi genellikle bir grafik dosyasından oluşturulur : 9 BİP215-H13-1 Dim Resim As Drawing.Image Resim = Drawing.Image.FromFile(Dosya_ismi) e.Graphic.DrawImage (Resim, New rectangle(10,10,100,100)) Image nesnesi Save metodu ile istenilen resim formatında (jpg, bmp, gif gibi) kaydedilir. Örnek uygulamalarda DrawImage yöntemini kullanacağız. Bu uygulamalarda DrawImage çok daha iyi anlaşılacaktır. Çalışma Ödevi Visual Basic.NET 2003 ders kitabınızdaki Bölüm 11 Grafikler ve Animasyon bölümünde Sayfa 348'deki Uygulama : Satış Grafikleri Projesini kitaptaki adım adım uygulamadan yararlanarak yapınız. 10 BİP215-H13-1 11