3 Ekim 2020 Cumartesi

QuickBasic - 13: Grafik işlemleri-1

Yayınlama: Ekim 2019
Güncelleme: 14 Ağustos 2021

COLOR

Grafik işlemleri yaparken yazı ve zemin rengi belirlemek için kullanılan COLOR komutu, ekran moduna göre farklı şekillerde kullanılı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:



Renk kodları aşağıdaki tabloda olduğu gibidir.
Sayının;
0. biti mavi,
1. biti yeşil,
2. biti kırmızı renk içindir.
3. bit aktifse aynı renk parlak(açık renk) olacaktır.
Ekran modu uygunsa 4. bit aktif edilerek aynı rengin yanıp sönmesi sağlanır.


SCREEN 0: CLS
COLOR 2 'yeşil
PRINT "Merhaba"
COLOR 2 + 8 '=10, açık yeşil
PRINT "Merhaba"
COLOR 2 + 8 + 8 '=20, yanıp sönen yeşil
PRINT "Merhaba"
COLOR 2 + 8 + 8 + 8 '=26, yanıp sönen açık yeşil
PRINT "Merhaba"

PRINT
COLOR 5 'mor
PRINT "Merhaba"
COLOR 5 OR &H8 '=13, açık mor(pembe)
PRINT "Merhaba"
COLOR 5 OR &H10 '=21, yanıp sönen mor
PRINT "Merhaba"
COLOR 5 OR &H18 '=29, yanıp sönen açık mor(pembe)
PRINT "Merhaba"
Daha detaylı bilgi için QuickBasic Yardımda COLOR komutuna bakınız.

CLS

Zemin rengi ile ekranı temizler.

Kullanımı:
CLS [{0 | 1 | 2}]
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şka bir renk ile değiştirir.
Bu komut yalnız EGA, VGA ve MCGA ekranlarda kullanılabilir.

Kullanımı:
PALETTE değişecek_renk, renkkodu
Renk kodu:

Renk kodu aşağıdaki formül ile hesaplanır.
renkkodu = kırmızı + (256 * yeşil) + (65536 * mavi)
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

Parametre girilmezse varsayılan palet renkleri ayarlanır.

Örnek 1:
SCREEN 0
CLS
COLOR 14 ' Sarı renk
PRINT "Merhaba!"
SLEEP
PALETTE 14, 4 'Sarı renk Kırmızı ile değişti
SLEEP
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

PALETTE USING

Dizi değişkenindeki değerler ile palet renklerini değiştirir.

Kullanımı:
PALETTE USING dizi_değişkeni [(dizi_indeks)]
dizi_indeks: Belirtilirse; belirtilen indeks numarasından itibaren değerler alınır.

Örnek:
DEFINT A-Z
SCREEN 1
FOR i = 0 TO 3
	a(i) = i
NEXT
LINE (130, 30)-(280, 160), 1, BF
LINE (20, 10)-(160, 100), 2, BF
CIRCLE (160, 110), 50, 3
PAINT STEP(0, 0), 3, 3

DO
	FOR i = 0 TO 3
		a(i) = (a(i) + 1) MOD 16
	NEXT
	PALETTE USING a
	SLEEP 1
LOOP WHILE INKEY$ = ""

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.

renkbayrağı : Kullanılmaması veya 0 olması durumunda ASCII kodunu verir. 0 haricinde verilen bir sayı ise satır ve sütundaki karakterin yazı ve zemin rengini içeren bir sayı değeri verir.
yazı rengi için: x AND 15
zemin rengi için: x \ 16
formülü kullanılır.

Ö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) 'karakter kodu
r = SCREEN(1, 1, 1) 'renk kodu
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.
QuickBasic hem metin hem de grafikleri ekranda görüntüleyebilir.

Grafik komutlarını kullanmak için önce ekran modunu belirlemek gerekir.
QuickBasic 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 pikselli) grafikler daha düzgün grafikler oluştururken, daha düşük çözünürlüklü grafikler (daha az pikselli) daha hızlı yazılabilir / güncellenebilir.

Ne yazık ki QuickBasic'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 "Görüntü oluşturulacak"
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 "Görüntüler 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ı

QuickBasic, 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.

QuickBasic, 0 ile 13 arası sayı ile temsil edilen 14 toplam modu destekler.
SCREEN 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.
QuickBasic 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

PMAP

Fonksiyon olarak kullanılır. Fiziksel veya WINDOW ile oluşturulan ekran koordinat karşılık değerini verir.

Kullanımı:
PMAP (koordinat, fonksiyon)
koordinat: Değeri alınacak koordinat noktası.

fonksiyon: 0-3 arası bir değer alabilir.

0 : WINDOW ile tanımlanan ekran koordinatının fiziksel ekrandaki X değeri
1 : WINDOW ile tanımlanan ekran koordinatının fiziksel ekrandaki Y değeri
2 : Fiziksel ekran koordinatının WINDOW ile tanımlanan ekran koordinatınındaki X değeri
3 : Fiziksel ekran koordinatının WINDOW ile tanımlanan ekran koordinatınındaki Y değeri

Örnek:
SCREEN 12
WINDOW SCREEN (0, 0)-(100, 100)
x = PMAP(50, 0) '50 : ekranın orta noktası
y = PMAP(50, 1)
PRINT "Fizisel ekran orta nokta(x,y):"; x; y '319 240

x = PMAP(639, 2) 'ekranın sağ alt köşesi
y = PMAP(479, 3)
PRINT "Window ile belirlenen ekran sağ alt köşe(x,y):"; x; y '100 100


Önceki Bölüm: 12: Dosya işlemleri-3 Sonraki Bölüm: 14: Grafik işlemleri-2

Hiç yorum yok:

Yorum Gönder