15.01.2015 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!