Amiga Dunyasi - Sayi 19 (Aralik 1991).pdf - Retro Dergi
Amiga Dunyasi - Sayi 19 (Aralik 1991).pdf - Retro Dergi
Amiga Dunyasi - Sayi 19 (Aralik 1991).pdf - Retro Dergi
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
DİLLER<br />
CloseLibrary(IntuitionBase);<br />
retum(l);<br />
}<br />
Bu programda, 64x20 boyutlarında bir bitmap hafıza açıyoruz.<br />
Bu bitmap bir ekran ile aynı özellikleri taşıyor. Fakat ekran gibi<br />
görülmüyor. Normal bir ekrana çizer gibi, bu ekrana da herhangi<br />
bir grafik komutuyla çizim yapabiliyoruz. Şu yaptığımız çizimleri<br />
de ekrana getirerek görmemiz mümkün.<br />
Bizim bu programımız da, aynı şekilde bu bitmap'e çizilen bir<br />
resmi ekrana yayıyor.<br />
Programımızın diğer bölümleri önceki programımızda olduğu<br />
gibi. Bu nedenle farklı yönlerini açıklamaya başlıyorum,<br />
struct RastPort rpx;<br />
struct BitMap bmx;<br />
64x20 boyutlarındaki hafıza bloğumuzun rastport ve bitmap<br />
değişkenlerini tanımlıyoruz. Burada dikkat ettiyseniz rpx ve bmx<br />
pointer olarak tanımlanmamış. Çünkü bu hafıza bloğumuz ilk defa<br />
bizim tarafımızdan tanımlanıyor. Bundan dolayı rastport ve<br />
bitmap yapıları da bizim tarafımızdan tanımlanmak zorunda, rpx<br />
ve bmx gerçek rastport ve bitmap özelliklerinde ve uzunluğunda<br />
bulunuyor. Bu nedenle değişkenleri bir komut içerisinde kullanırken,<br />
başlarına & işaretini koymalıyız.<br />
InitBitMap(&bmx,2,64,20);<br />
Bu fonksiyon ile bitmap'imizi yaratıyoruz, bmx oluşturulacak<br />
olan bitmap'in kendisi, 2 bitplane sayısı yani 4 renk, 64x20 ise<br />
bitmap'in x ve y boyunu belirtiyor.<br />
bmx.Planes[0]=AllocMem( 160,MElvlF_CHIPIMEMF_CLEAR);<br />
bmx.Planes[0], oluşturulan bitmap'in ilk plane bloğu. Bizim bu<br />
hafıza bloğunu kullandığımızı sisteme belirtmemiz ya da diğer<br />
bir deyişle ayırtmamız gerekiyor.<br />
AllocMem( 160,MEMF_CHIPIMEMF_CLEAR);<br />
AllocMem fonksiyonu, bu işlemi yapmamızı sağlıyor. Bu fonksiyon<br />
işledikten sonra ayırılan hafıza blok adresinin başlangıç adresiyle<br />
geri dönüyor. 160 değeri bize gereken boş hafıza byte sayısını<br />
belirtiyor. Bu sayıyı,<br />
160 = 64/8*20<br />
ile hesaplıyoruz. 64, x genişliğidir; 8, x boyunca harcanan byte<br />
sayısını bulmaya yarar; 20 ise, y boyunu belirtiyor. Bildiğiniz gibi<br />
soldan sağa 8 pixellik bir nokta, hafızada 1 byte yer harcar.<br />
AllocMem içerisindeki MEMF_CHIP macrosu, ayrılacak olan<br />
hafıza bloğunun chip memory'de ayrılacağını belirtiyor. Burada<br />
MEMF_CHIP ya da MEMF_FAST macrolarını kullanmak mümkün.<br />
MEMF_CLEAR, blok ayrılırken bloğun temizlenmesini sağlıyor.<br />
MEMF_CHIP ile MEMF_CLEAR macrolarını aynı anda<br />
kullanmak için, MEMF_CHIPIMEMF_CLEAR yazıyoruz. Burada<br />
iki macro birbirleri ile OR yapılmış oluyor.<br />
Blok ayırırken dikkat edilecek husus, eğer blok içerisinde grafik<br />
komutları kullanılacaksa, bloğun chip hafızada ayrılması gerekiyor.<br />
Bu nedenle biz de MEMF_CHIPIMEMF_CLEAR macrolarını<br />
kullandık. Fast hafızada ayrılan hafıza bloklarına grafik<br />
komutları ile erişemiyoruz.<br />
Daha sonra hafızanın yeterli olup olmadığını kontrol ederek<br />
yetersizse memory mesajıyla programdan geri çıkıyoruz. Bir<br />
hata oluşmazsa ikinci plane için de aynı işlemleri yapıyor ve bu<br />
bitmap için bir de rastport açıyoruz.<br />
InitRastPort(&rpx);<br />
rpx, bu rastport'u belirtiyor.<br />
rpx.BitMap=&bmx;<br />
ile, rpx'in kullanacağı bitmap'i gösteriyoruz.<br />
DrawEllipse(&rpx,32,10,30,8);<br />
for(x=0;x