Etiketler

3 Haziran 2020 Çarşamba

QuickBasic Kursu: Bölüm 13: Grafik işlemleri-1

Yayınlama: Ekim 2019
Güncelleme: 19 Haziran 2020
Önceki Bölüm: QuickBasic Kursu: Bölüm 12: Dosya işlemleri-3

COLOR

Yazı ve zemin rengini ayarlar. Ekran moduna göre kullanımı farklıdır.
SCREEN 0 : COLOR [renk][,[zeminrengi][,çerçeve]] 
SCREEN 1 : COLOR [zeminrengi][,palet] 
SCREEN 7-10 : COLOR [renk][,zeminrengi] 
SCREEN 10-13 : COLOR [renk] 
renk: yazı rengi
zeminrengi: arkaplan rengi
çerçeve: monitörün kullanılan alanının dışında kalan alanın rengi. LCD ve LED monitörlerde görülmez. Tüplü manitörler içindir.
Her ekran modunun renk sayısı farklıdır.

Örnekler:

SCREEN 12: 256K renkten aynı anda en fazla 16 renk kullanılabilir.
SCREEN 13: 256K renkten aynı anda en fazla 256 renk kullanılabilir.
SCREEN 0: 0-31 renk. 16-31 arası yanıp sönen renkler.
PALETTE komutu ile renkler değiştirilebilir.

RENK KODLARI:
0: Siyah
1: Mavi
2: Yeşil
3: Turkuaz
4: Kırmızı
5: Mor
6: Kahverengi
7: Beyaz
8: Gri
9: Açık mavi
10: Açık yeşil
11: Açık turkuaz
12: Açık kırmızı
13: Açık mor
14: Sarı
15: Açık beyaz


Daha detaylı bilgi için Qbasic Yardımda COLOR komutuna bakınız.

CLS

Kullanımı:
CLS [{0 | 1 | 2}]
Zemin rengi ile ekranı temizler.
Parametre girilmezse VIEW komutu ile belirtilen grafik ya da metin alanını siler.
0 : Ekranın metin ve grafiklerini siler
1 : VIEW ile tanımlanan grafik alanı siler.
2 : VIEW ile tanımlanan metin alanı siler.
VIEW komutu için sonraki sayfaya bakınız.

Örnek 1:
COLOR 14,4
CLS
PRINT "Merhaba!"
Örnek 2:
SCREEN 0
CLS
COLOR 14, 1
FOR n = 1 TO 80 * 24
 PRINT "A";
NEXT
VIEW PRINT 10 TO 20
COLOR 14, 4
SLEEP
CLS
SLEEP
FOR n = 1 TO 80 * 8
 PRINT "B";
NEXT
SLEEP
CLS 2
SLEEP
COLOR 7, 0
CLS 0
PRINT "Bitti !"
SCREEN ile ekran değiştirildiğinde ekran silinmiş olarak gelir.

PALETTE

Renk paletindeki bir rengi başkasıyla değiştirir. Bu komut yalnız EGA, VGA ve MCGA ekranlarda kullanılabilir.

Kullanımı:
PALETTE değişecekrenkkodu, renkkodu
Renk kodu:
renkkodu = 65536 * mavi + 256 * yeşil + kırmızı
formülü ile hesaplanır.
mavi, yeşil ve kırmızı için 0-63 arası değer verilir.
Rengin en koyu tonu : 0
Rengin en açık tonu: 63
Örnek 1:
SCREEN 0
CLS
COLOR 14 ' Sarı renk
PRINT "Merhaba!"
a$ = INPUT$(1)
PALETTE 14, 4 'Sarı renk Kırmızı ile değişti
a$ = INPUT$(1)
PALETTE 0, 2 'Siyah renk Yeşil ile değişti
Örnek 2:
SCREEN 12
COLOR 7
PRINT STRING$(50, 219)
COLOR 12 ' açık kırmızı
PRINT STRING$(50, 219)
COLOR 7
PRINT STRING$(50, 219)
SLEEP
FOR n = 63 TO 0 STEP -3
 LOCATE 2, 1: PRINT n
 'PALETTE 12, 65536 * 0 + 256 * n + 0
 PALETTE 12, 256 * n
 SLEEP 1
NEXT
Örnek 3:
DEFINT A-Z
SCREEN 12
kat = 22
FOR renk = 0 TO 15
 y = renk * kat + kat
 LINE (0, y)-(639, y + kat), renk, BF
NEXT
SLEEP
FOR n = 1 TO 8
 FOR renk = 15 TO 0 STEP -1
  rk = renk * (63 / 15)
  SELECT CASE n
   CASE 1: mavi = rk
   CASE 2: yesil = rk
   CASE 3: kirmizi = rk
   CASE 4: mavi = rk: yesil = rk
   CASE 5: mavi = rk: kirmizi = rk
   CASE 6: yesil = rk: kirmizi = rk
   CASE 7: mavi = rk: yesil = rk: kirmizi = rk
   CASE 8: yesil = rk / 2: kirmizi = rk
  END SELECT
  PALETTE renk, 65536 * mavi + 256 * yesil + kirmizi
  LOCATE 1, 1: PRINT "Mavi", "Yeşil", "Kırmızı"
  LOCATE 2, 1: PRINT mavi, yesil, kirmizi
  FOR i = 1 TO 10000: NEXT
 NEXT
 SLEEP
NEXT

SCREEN

Kullanım 1: Fonksiyon olarak
x = SCREEN(satır, sütun [, renkbayrağı])
Ekranın satır ve sütunundaki karakterin ASCII kodunu veya rengini verir.
Örnek 1:
CLS
PRINT "Mesut"
FOR n = 1 TO 5
    x = SCREEN(1, n)
    PRINT x;
NEXT
Çıktı:
Mesut
77 101 115 117 116
Örnek 2:
COLOR 14, 4
CLS
PRINT "M"
ascii = SCREEN(1, 1)
r = SCREEN(1, 1, 1)
yazirengi = r AND 15
zeminrengi = r \ 16
PRINT "Karakter kodu:"; ascii '77
PRINT "Karakter     : "; CHR$(ascii) 'M
PRINT "Yazı rengi   :"; yazirengi '14
PRINT "Zemin rengi  :"; zeminrengi '4
Kullanım 2: Ekran modu değiştirme
SCREEN [mod] [,[renkanahtari]][,[calismasayfasi]][,[gosterilensayfa]]
SCREEN komutu, ekran görüntüleme modunu ve program penceresinin çalışma alanının boyutunu ayarlar.
QBasic hem metin hem de grafikleri ekranda görüntüleyebilir.
Grafik komutlarını kullanmak için önce ekran modunu belirlemek gerekir.
QBasic ekrandaki piksellerin rengini kontrol ederek grafikler oluşturur, ancak ekran çözünürlüğünü de kontrol edebilir. Yüksek çözünürlüklü(daha çok piksellli) grafikler daha düzgün grafikler oluştururken, daha düşük çözünürlüklü grafikler (daha az piksellli) daha hızlı yazılabilir / güncellenebilir.

Ne yazık ki Qbasic'teki maksimum çözünürlük modu sadece 640x480 ve sadece 16 rengi destekliyor. En fazla renk 320x200 çözünürlüklü ekran modunda 256'dır.
Bu modlar, özellikle günümüzün yüksek çözünürlüklü 24 bit renkli grafik modlarıyla karşılaştırıldığında, kısıtlı, ancak bazen şaşırtıcı derecede iyi grafikler oluşturmak için kullanışlıdır.

calismasayfasi ve gosterilensayfa sayfalama özelliği olan ekran modlarında kullanılır.
Örnek:
SCREEN 7
PRINT "Ekran sayfaları hazırlanacak"
SLEEP
FOR n = 7 TO 0 STEP -1
 SCREEN 7, , n, 0 'n : çalışma sayfası
 c = n + 1
 CIRCLE (c * 25, 100), c * 20, n + 5
 PRINT "Sayfa : "; n
NEXT
PRINT "Sayfalar hazır. Sırasıyla gösterilecek"
SLEEP
FOR n = 7 TO 0 STEP -1
 SCREEN 7, , , n 'n : gösterme sayfası
 SLEEP
NEXT

Ekran Modları

QBasic, her ekran modunun çözünürlük, renkler, ekran sayfaları, metin boyutu ve daha fazlası gibi özelliklerin bir kombinasyonunu tanımladığı çeşitli grafik ekran modlarını destekler.

QBasic, 0 ile 13 arası sayı ile temsil edilen 14 toplam modu destekler.
Mod 0 varsayılan moddur ve yalnızca metnin görüntülenmesine izin verir. Grafik komutları çalışmaz.
Diğer tüm 1-13 mod metin ekranını desteklemenin yanı sıra piksel olarak grafik oluşturmayı da destekler.
Ekran modlarından sadece birkaçı programcılar tarafından yaygın olarak kullanılmaktadır.
QBasic Yardım'da tüm ekran modları hakkında bilgi bulabilirsiniz.

Sık kullanılan ekran modları:
Mod Çözünürlük Renk Sayfa Metin
0 80x25 64 renkten 16'sı 4 80x25/43/50
7 320x200 16 0-7 40x25
12 640x480 256K renkten 16'sı 1 80x60/30
13 320x200 256K renkten 256'sı 1 40x25
256K = 64*64*64 = ‭262144‬
Düşük çözünürlüğe rağmen geniş renk aralığı sebebiyle mod 13 en çok kullanılan moddur.
Mod 7 titreşimsiz grafik animasyonu sağlamak için birden fazla sayfa kullanılabilir.
Yüksek çözünürlük gerektiğinde mod 12 kullanılır.

SCREEN komutuyla seçilen ekran çözünürlüğüne göre ekran üzerinde fiziksel noktalar(piksel) ayarlanır.
Örneğin SCREEN 12 ile oluşturulan ekranda;
yatayda 640, dikeyde 480 pikseldir.
0,0 noktası ekranın sol üst köşesidir. 639,479 sağ alt köşededir.
SCREEN 12
LINE (0, 0)-(639, 479), 14
SLEEP

WINDOW

Ekran modunun çözünürlüğüne göre fiziksel koordinatlar belirlenir.
Window komutu ile ekranın koordinat sistemini kendi isteğimize göre ayarlayabiliriz. Böylece ekran modu değişiminden kaynaklanan görüntü değişikliği oluşmaz.

Kullanımı:
WINDOW [SCREEN] (x1,y1)-(x2,y2)
SCREEN kullanılmazsa 0,0 koordinatı sol alt köşedir. Kullanılırsa SCREEN komutundaki gibi sol üst köşededir.
(x1,y1) : sol alt köşe
(x2,y2) : sağ üst köşe
x ve y değerleri negatif olabilir. Tam sayı olması şart değildir.
WINDOW (0,0)-(100,100)
Ekran moduna bakılmaksızın ekran yatayda 100, dikeyde 100 birim olduğu varsayılmıştır.
Artık fiziksel ekranın sol alt köşesi 0,0 sağ üst köşesi 100,100 olarak kabul edilir. Böylece ekranı orantılamak ve konumlandırmak daha kolay olur. Örneğin her ekranda 50,50 konumu ekranın tam orta noktası olur.

Örnek 1: WINDOW komutuyla ekranın orta noktası 0,0 olarak ayarlanmıştır.
SCREEN 12
x = 639 / 2
y = 479 / 2
WINDOW (-1 * x, -1 * y)-(x, y)
FOR n = 20 TO 480 STEP 20
 r = r + 1
 CIRCLE (0, 0), n, r
NEXT
SLEEP

Örnek 2: Aşağıdaki kodları denedikten sonra ekran modunu değiştirin, WINDOW komutunu iptal edip deneyin.
SCREEN 12
WINDOW (0, 0)-(100, 100)
LINE (0, 0)-(100, 100), 14, B
LINE (0, 0)-(100, 100), 3
LINE (0, 100)-(100, 0), 12
CIRCLE (50, 50), 25
LINE (50 - 10, 50 - 10)-(50 + 10, 50 + 10), 2, B
SLEEP

Örnek 3: Sinüs Grafiği
'SINUS GRAPH
'Mesut Akcan. 2020
CLS
CONST pi = 3.14159265359#
SCREEN 13
WINDOW (0, -1)-(360, 1)
FOR i = 0 TO 360
 y = SIN(i * pi / 180)
 PSET (i, y), 14
NEXT
SLEEP

Örnek 4: Fraktal 1 (Fractal)
'FRACTAL
DEFINT A-Z
DIM i AS LONG
SCREEN 12
WINDOW SCREEN (0, 0)-(1000, 1000)
x = 500
y = 500
RANDOMIZE TIMER
FOR i = 1 TO 100000
 rs = INT(RND(1) * 3)
 IF rs = 1 THEN
  fx = 500
  fy = 0
 ELSEIF rs = 2 THEN
  fx = 0
  fy = 1000
 ELSE
  fx = 1000
  fy = 1000
 END IF
 x = (x + fx) / 2
 y = (y + fy) / 2
 PSET (x, y), 10
 IF INKEY$ <> "" THEN EXIT FOR
NEXT

Sonraki Bölüm: QuickBasic Kursu: Bölüm 14: Grafik işlemleri-2

Hiç yorum yok:

Yorum Gönderme