Graphics etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Graphics etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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.

17 Ağustos 2020 Pazartesi

QuickBasic - 23: Fare (mouse) kullanımı-4

Yayınlama: 17 Ağustos 2020

2) Metin ekranda fare imleç görüntüsünü değiştirme

Metin ekranda (SCREEN 0) fare imlecini değiştirmek için yazmaçlara aktarılacak değerler:
AX = &HA
BX = imleç tipi:
0: Yazılım imleci,
1: Donanım imleci

a)Yazılım imleci

AX = &HA
BX = 0
CX = AND maskesi. Varsayılan değer = &HFFFF
DX = XOR maskesi. Varsayılan değer = &H7700
CX ve DX yazmaçlarına aktarılan INTEGER değerin(2 bayt);
alt baytı(low byte): Karakter kodu,
üst baytı(high byte): Zemin rengi ve karakter rengini ayarlar.

Üst baytdaki;
1. karakter: Zemin rengini,
2. karakter: karakter rengi içindir.

Zemin rengi için 7'den büyük sayılar imlecin yanıp sönmesini sağlar(blinking)
alt bayt: 16'lık sayıda sağdaki 2 karakter. örneğin &H2FA3 için alt byte A3 dür.
alt baytı elde etmek için formül: SAYI AND &HFF
üst baytı elde etmek için formül: SAYI AND &HFF00
üst bayt: 16'lık sayıda soldaki 2 karakter. örneğin &H2FA3 için üst byte 2F dir.

Örnek 1:
DX = &H2F58

Kodların açılımı:
2: Yeşil zemin. 2=Yeşil renk
F: Beyaz yazı rengi. &HF=15=Beyaz renk
58: &H58 = 88 = X karakteri

Örnek 2:
DX = &H9E18
9: Mavi zemin.1+8=9. 1=Mavi renk. 7'den büyük renk kodları yanıp sönen imleç içindir.
E: Sarı yazı rengi. &HE=14=Sarı renk
18: &H18 = 24 = Yukarı ok karakteri

15 Ağustos 2020 Cumartesi

QuickBasic - 20: Fare (mouse) kullanımı-1

Yayınlama: 29 Temmuz 2020
Güncelleme: 15 Ağustos 2020

Kötü haber: Qbasic ve QuickBasicte doğrudan fare(mouse) kullanmak için bir komut bulunmuyor.

Belkide Qbasic'in piyasaya sürüldüğü tarihlerde fare kullanımı yaygın değildi ya da fare standartları tam oturmamıştı.

İyi haber: QuickBasicte DOS kesintilerini(interrupt) çalıştırmak için ve assembly kodlarını belleğe aktarıp çalıştırmak için kodlar bulunuyor. Böylece dolaylı olarak da olsa fare kullanılabiliyor.

DOS kesintisi ile fare çalıştırma

DOS işletim sistemi yapısı gereği Windows gibi çoklu görev(multitasking) özelliği yoktur. DOS, kesinti denilen bir özelliği kullanarak sahte çoklu görev işlevini yerine getirir.

DOS/BIOS kesinti listelerine bakıldığında çok sayıda kesinti olduğu görülecektir.

Kesinti listesi: Link1, Link2, Link3, Link4, Link5, Link6

Bu yazının konusu olan ve bize gerekli olan kesinti &H33 (51)
&H33
kesintisi bilgisayar fare donanımı ile ilgi fonksiyonları içerir.
Kullanılacak fare fonksiyonunun numarası AX yazmacına(register) aktarılır.

QuickBasic - 22: Fare (mouse) kullanımı-3

Yayınlama: 15 Ağustos 2020
Güncelleme: 22 Ağustos 2020

Fare imleç görüntüsünü değiştirme

Varsayılan fare(mouse) imleç(cursor) görüntüsü grafik ekranda standart ok şeklinde(yandaki resim), metin(text) ekranda ise içi dolu dikdörtgen kutu karakteri(karakter kodu=219) şeklindedir.
İstenirse grafik ve/veya metin ekranda imleç görüntüsü değiştirilebilir.
İşlemler ve yazmaçlara aktarılacak değerler farklı olduğu için iki ayrı başlık altında açıklama yapılacaktır.

1) Grafik ekranda fare imleç görüntüsünü değiştirme

Yazmaçlara aktarılacak değerler:
AX = &H9
BX = Etkin nokta X değeri (Hot Spot)
CX = Etkin nokta Y değeri
DX = Görüntü bilgilerini içeren bellek adresi (64 bayt)

İmleç görüntüsü bilgileri 64 bayt uzunluğundadır. 32 baytlık 2 set halinde hazırlanır. Her set 16x16 bitlik bir desende oluşturulur. Örneğin 16 satır ve her satırda 2 baytlık(16 bit) veri.

İlk desen 32 baytlık veri AND maskesi içindir.
İkinci desen 32 baytlık veri XOR maskesi içindir.

Bu iki desen, iki grafik düzlemi oluşturur. İki grafik düzleminde oluşan grafik görüntü ekrana önce AND ile sonra onun üzerine XOR ile basılır. Böylece nihai fare imleci görüntüsü oluşur.

İlk ve ikinci desendeki 0 ve 1 bit değerlerin çakıştırılmasıyla ekranda 4 farklı durum oluşur.
00: Siyah
01: Beyaz
10: Şeffaf (Transparan)
11: Zemin zıt rengi

13 Ağustos 2020 Perşembe

QuickBasic - 19: Grafik işlemleri-7

Yayınlama: 25 Temmuz 2020
Güncelleme: 13 Ağustos 2020

GET

Dosya işlemlerinde kullanılan GET komutundan farklı olarak grafik işlemlerinde kullanılan farklı bir GET komutu vardır. Kullanımları farklıdır.
Kullanımı:
GET [STEP] (x1-y1)-[STEP](x2,y2),değişkenadı[(indeks)]
Ekran üzerinde x1,y1 ile x2,y2 dikdörtgeni içinde kalan görüntü bilgisi belirtilen boyutlu değişkenadı'na aktarılır. Değişkene aktarılan görüntü PUT komutu ile ekranın istenilen konumuna basılır(aktarılır).

STEP : Göreceli koordinat kullanmak içindir. Bir önceki komutun aktif noktası 0,0 kabul edilir.
(x1,y1) : seçim alanı başlangıç köşe noktası
(x2,y2) : seçim alanı bitiş karşı köşe noktası
değişkenadı : Görüntü bilgilerinin aktarılacağı çok boyutlu değişken. Değişken boyutu görüntü bilgilerini aktaracak büyüklükte olmalıdır aksi halde GET komutu çalıştırılmaz. Illegal function call hatası verir.

Boyutun ne kadar olacağını hesaplamak için kullanılan formül QuickBasic yardım'da verilmiştir.
4+INT(((x2-x1+1)*(düzlemdeki pikselin bit sayısı)+7)/8)*düzlem*((y2-y1)+1)
Ekran

Modu
Bir düzlemdeki bir

pikselin bit sayısı
Düzlem

(Ekran sayfası)
1 2 1
2 1 1
7 1 4
8 1 4
9 1 2
10 1 2
11 1 1
12 1 4
13 8 1
Örneğin, SCREEN 2, sol üst köşe (0,0) sağ alt köşe (32,32) için değişkenin bayt cinsinden gerekli boyutu:
= 4 + INT ((33 * 1 + 7) / 8) * 1 * (33)
Sonuç = 169 bayt.

5 Ağustos 2020 Çarşamba

QuickBasic - 21: Fare (mouse) kullanımı-2

Yayınlama: 5 Ağustos 2020

Fare konumunu değiştirme

Çoğunlukla fare konumunu kullanıcı fareyi hareket ettirerek değiştirir ancak gerekirse kodlarla da farenin konumunu değiştirilebilir.
Bu işlem için kesinti çağrılmadan önce yazmaçlara aşağıdaki değerler aktarılır. Sonra kesinti çağrılır.
AX = &H4
CX = Farenin X konumu
DX = Farenin Y konumu
inreg.ax = &H4
inreg.cx = 100 'fare X konumu
inreg.dx = 120 'fare Y konumu
CALL INTERRUPT(&H33, inreg, outreg)
Örnek 1:
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
'$INCLUDE: 'qb.bi'
DEFINT A-Z
CONST goster = 1, gizle = 2
CLS
DIM SHARED inreg AS RegType, outreg AS RegType
inreg.ax = &H0
Kesinti
IF outreg.ax = &H0 THEN
	PRINT "Fare yok ya da kurulu değil!": END
END IF
CLS
FareIkonu goster
FOR satir = 4 TO 20 STEP 4
	FOR Sutun = 20 TO 60 STEP 20
		LOCATE 1, 1: COLOR 7
		PRINT USING "Fare konumu: Satır:## Sütun:##"; satir; Sutun
		LOCATE satir, Sutun - 2: COLOR 10: PRINT "->"
		x = (Sutun - 1) * 8
		y = (satir - 1) * 8
		FareKonumu x, y
		SLEEP 1
	NEXT
NEXT

SUB FareIkonu (durum%)
	inreg.ax = durum%
	Kesinti
END SUB

SUB FareKonumu (x%, y%)
	inreg.ax = &H4
	inreg.cx = x%
	inreg.dx = y%
	Kesinti
END SUB

SUB Kesinti
	CALL INTERRUPT(&H33, inreg, outreg)
END SUB
Örnek 2:

18 Temmuz 2020 Cumartesi

QuickBasic - 18: Grafik işlemleri-6

Yayınlama: 18 Temmuz 2020

PAINT

Kullanımı:
PAINT [STEP] (x,y)[,[dolgu] [,[çerçeverengi] [,arkaplan]]]
Belirtilen dolgu rengi veya deseni ile kapalı şekil içini boyar(doldurur)
Doldurma işlemi (x,y) koordinatından başlar. Şekil kapalı değilse taşıp ekranı doldurur.
STEP kullanıldığında son çizim konumu 0,0 kabul edilip göreceli koordinat uygulanır.
dolgu : Dolgu rengini belirten sayısal değer ya da deseni belirten karakter dizisi olmalıdır.
çerçeverengi : Dolgu yapılacak şeklin rengi (sınır çizgi rengi)
arkaplan : Sınırın sonlandırılması kontrol edilirken atlanacak "arka plan döşemesi dilimini" veren bir karakter dizisi değeri. Bitişik noktalar boya rengini gösterdiğinde resim sonlandırılır.
Arka plan döşemesi dilimi belirtmek, önceden boyanmış bir alanı boyamanıza izin verir.
Arka plan belirtilmediğinde varsayılan değer CHR$(0) olur.

Desen : 8 bit genişliğinde ve 64 bayta kadar olan bir dolgu deseninin tasarımıdır.

Desen dizesinde, her bayt, noktaları koyarken x ekseni boyunca 8 biti maskeler.
Bu kutucuk maskesini oluşturmak için sözdizimi şöyledir:

14 Temmuz 2020 Salı

QuickBasic - 17: Grafik işlemleri-5

Yayınlama: 16 Temmuz 2020

DRAW

Karakter kodlarıyla grafik ekranda çizim yapar.

Kullanımı:
DRAW "çizimkodları"
DRAW komutu çizim kodları:

Çizgi çizme kodları:
U : Yukarı (Up)
D : Aşağı (Down)
L : Sola (Left)
R : Sağa (Right)
E : Yukarı sağa çapraz
F : Aşağı sağa çapraz
H : Yukarı sola çapraz
G : Aşağı sola çapraz

Bu kodlar uygulandığında çizim konumu değişir. Örneğin U10 ile çizim konumu çizgi çizerek 10 piksel yukarı gider.
Verilen komutlar son nokta konumunu esas alarak çizim yapar.
Daha önceden konum belirten ya da değiştiren bir kodlama yoksa konum ekranın ortası alınır.
B : Çizgi çizmeden konum değiştirir(Blind). BL5 : Konum, çizgi çizmeden 5 piksel sola.
N : Çizgi çizer ancak konum değişmez. NR15 : Sağa 15 piksel çizgi ancak konum değişmez.

Örnek 1:

10 Temmuz 2020 Cuma

QuickBasic - 16: Grafik işlemleri-4

Yayınlama: 11 Temmuz 2020

LINE

Ekranda belirtilen 2 koordinat noktası arasına çizgi, dikdörtgen veya içi dolu dikdörtgen çizer.

Kullanımı:
LINE [[STEP] (x1,y1)]-[STEP] (x2,y2) [,[renk][,[B[F]][,stil]]]
(x1,y1) : Çizginin başlangıç noktası. (x1,y1) belirtilmediğinde bir önceki komutun aktif noktası alınır. Bir öncesinde nokta ile ilgili bir komut yoksa ekranın orta noktası alınır.
SCREEN 12
LINE -(0,0) 'ekranın orta noktasından 0,0 noktasına çizgi çizer
(x2,y2) : Çizginin bitiş noktası
STEP : Bir önceki çizim komutunun noktası 0,0 noktası olarak referans alınır. Göreceli koordinat sistemi içindir.
renk: Çizgi ya da dolgu rengi
B : Çapraz köşeleri (x1 , y1) ve (x2 , y2) olan dikdörtgeni çizer
BF : Çapraz köşeleri (x1 , y1) ve (x2 , y2) olan içi renk ile dolu dikdörtgeni çizer.
stil : Çizgi stili. Düz, noktalı veya kesik çizgi. BF kullanıldığında stil dikkate alınmaz.

Örnek 1:
SCREEN 7
CLS
LINE (0, 10)-(100, 10), 12
'(0,10) ile (100,10) arası türkuaz çizgi

LINE -(50, 60), 13
'x1,y1 belirtilmediği için
'önceki çizginin x2,y2 (100,10) değerleri alındı
'(100,10) ile (50,60) arasına kırmızı çizgi

LINE -(0, 10), 14
'(50,60) ile (0,10) arasına sarı çizgi
Örnek 2:

4 Temmuz 2020 Cumartesi

QuickBasic - 15: Grafik işlemleri-3

Yayınlama: 4 Temmuz 2020

PRESET

Kullanımı:
PRESET [STEP] (x , y) [, renk]
PRESET komutu PSET komutu gibi grafik ekranda koordinatları(x,y) belirtilen konuma belirtilen renk ile nokta koyar.
PSET komutundan farkı renk belirtilmezse zemin rengi ile nokta koyar (koordinata zemin rengiyle nokta koyduğu için silme işlemi uygulanmış olur)
STEP olursa bir önceki nokta referans alınarak göreceli koordinat sistemi kullanılır.

Örnek 1:

DEFINT A-Z
SCREEN 7
COLOR , 4
A = 10
FOR x = 0 TO 50
    FOR y = 0 TO 20
        ' PSET (x + A, y + A), 14
        PRESET (x + A, y + A), 14 'Nokta koy
    NEXT
NEXT
SLEEP
FOR x = 0 TO 50
    FOR y = 0 TO 20 STEP 3
        PRESET (x + A, y + A) ' Sil
    NEXT
NEXT
Örnek 2:

11 Haziran 2020 Perşembe

QuickBasic - 14: Grafik işlemleri-2

Yayınlama: 11 Haziran 2020

VIEW

Sonraki grafik komutlarına çıktı için ekran sınırlarını belirler. Fiziksel ekran üzerinde sanal çizim alanı oluşturur(port). Ekran içinde ekran gibi.

Kullanımı:
VIEW [SCREEN] (x1,y1)-(x2,y2) [,renk][,çerçeve]
Herhangi bir parametre girilmezse varsayılan ekranı tanımlar.

SCREEN parametresi kullanıldığında sonraki çizim komutlarında ekranın mutlak koordinat sistemine göre işlem yapılacağını belirtir.
Normalde yani SCREEN parametresi kullanılmadığında göreceli koordinat sistemi kullanılır.

Oluşturulan ekranın;
sol üst köşesi (x1,y1) 0,0 olarak,
sağ alt köşesi (x2,y2) VIEW de belirtilen genişlik ve yükseklik olur (x2-x1, y2-y1)

renk: Belirtilen renk ile tanımlanan alan doldurulur. Altta kalan alan silinir. Belirtilmezse silme olmaz.

çerçeve: Tanımlanan alanın kenarlarına verilen renk kodu ile sınır çizgileri çizilir. Belirtilmezse çizilmez.

Örnek:
SCREEN 12
VIEW (50, 50)-(300, 300), 2, 14
LOCATE 1, 1: PRINT "VIEW"
CIRCLE (0, 0), 250, 15 ' oluşturulan ekranın göreceli koordinatları kullanılır
SLEEP
VIEW SCREEN (50, 50)-(300, 300), 3, 11
LOCATE 1, 1: PRINT "VIEW SCREEN"
CIRCLE (0, 0), 250, 11 ' fiziksel ekranın mutlak koordinatları kullanılır
SLEEP
VIEW (200, 200)-(400, 400), 4
CIRCLE (100, 100), 50
LOCATE 14, 27: PRINT "Silinecek !"
SLEEP
CLS 'aktif VIEW siler
LINE (0, 0)-(200, 200), 14
LINE (0, 200)-(200, 0), 14
SLEEP
VIEW 'Fiziksel ekran
LINE (0, 0)-(200, 200), 15
LINE (0, 200)-(200, 0), 15

VIEW PRINT