Amiga Dünyası sayı 20, sayfa 28

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 28

Geçen ayki örneklerimizin benzerlerine bu ay da devam ediyoruz. Hatırlarsanız sizlere bu ayki yazımızda, Amiga C'de pratik olarak nasıl resim yükleneceğini gösterecektim. Şimdi Amiga'da, resim yükleme olayını bir inceleyelim.

Her Amiga kullanıcısının bildiği gibi Amiga'nın grafik özelliği diğer kişisel bilgisayarlara göre oldukça iyidir. Oynadığınız oyunların grafikleri (ve hızları) buna yeterli bir örnektir sanırım. Ayrıca Amiga'da oldukça iyi grafik çizim programları da mevcut. Bunların başında tabii ki Deluxe Paint geliyor. Acaba biz Deluxe Paint ya da buna benzer bir çizim programında hazırladığımız bir resmi, oyunlarda olduğu gibi ekranımıza istediğimiz gibi getiremez miyiz? Tabii ki getirebiliriz. Aşağıda vermiş olduğum program ile bu mümkün. Aslında Amiga için bu iş oldukça basit bir hale geldi. Özellikle Amos Basic çıktığından bu yana hiçbir enteresanlığı kalmadı diyebilirim. Fakat Amiga C'de ekrana bir resim taşımanın çok püf noktası var. Çünkü ekrana gelen resminizi istediğiniz gibi kontrol etmek size kalıyor. C'de, yüklemek istediğiniz resmin boyutuyla ve renkleriyle istediğiniz gibi oynayabilirsiniz. Hem de resim ekrana gelmeden! Tabii ki size bunu sağlayan bir sistemle, yani IFF (Interchange Format File) sistemiyle. Bu sistemi Electronic Arts firması geliştirmiştir. Zaten Deluxe Paint çizim programı da aynı firmanın ürünüdür. Biraz daha derinlere inelim ve IFF formatının ne olduğunu görelim.

IFF formatının yapı taşı ILBM structure yapısıdır. Bu yapı içerisinde yüklenecek olan resmin bütün özellikleri saklıdır. Bir IFF resmi yüklenirken ilk olarak o resmin Header (başlık) kısmı yüklenir. Bu kısımda çeşitli kısaltmalar ve bu kısaltmaların yanında da uzunluklar saklıdır. Bu bilgiler ILBM structure yapısına aktarılır. Daha sonra resmin esas kısmı yüklenir ve ekrana getirilir.

IFF resim yükleme C dilinde de aynı kademelerden geçmektedir. Şimdi C dilinde IFF kullanabilmemiz için gerekli olan programları bir öğrenelim.

Biz, C'de IFF yükleme işlemini bir program yardımıyla gerçekleştiriyoruz. Tabii eğer siz isterseniz kendiniz de yazabilirsiniz. Ben yazdım. Fakat bence Amerika'yı yeniden keşfetmeye hiç gerek yok. Ne olduğunu öğrenmeniz şimdilik yeterli. Kullanacağımız bu yardımcı program Aztec C V3.6A veya Aztec C V5.0A derleyicilerinin ikinci disketlerindeki 'iff' dosyası içerisinde bulunuyor. Bu dosyanın içerisinde şimdilik bizi ilgilendiren iki dosya var. Bunlar:

JIFF.H: Bu dosyayı derleyicinizdeki 'include' dosyası içine kopyalayın. Jiff.h içerisinde ILBM yapısı ve bazı macrolar tanımlanıyor.

JIFF.O: Bu dosyayı da derleyicinizdeki 'lib' dosyası içine kopyalayın. Jiff.o object dosyası içerisinde ise IFF yüklerken kullanacağınız komutların object halleri bulunuyor. İsterseniz bu komutların kendisini, disketinizdeki iff dosyası içerisindeki jiff.c'ye bakarak görebilirsiniz.

Kopyalama işlemleri de bittikten sonra artık IFF yükleyebilen programlar hazırlayabilirsiniz. Şimdi aşağıda vermiş olduğum programı yazarak kaydedin ve compile işlemlerini şöyle yapın; CC +L prog.c LN prog.o jiff.o -LC32

Link işlemi sırasında jiff.o objesini de ekliyoruz. Böylece IFF komutları, biz yazmışız gibi ana programımıza bağlanıyor ve tek parça bir program ortaya çıkıyor. Bundan sonra artık program ismimizi yazarak çalışmasını görebiliriz.

Sıra geldi program listemizi açıklamaya. İlk olarak listemizi bir gözden geçirelim;

/* Programming by CENKER OZKURT */ finclude <stdio.h> #include <exec/types.h> #include <graphics/gfxbase.h> #include <intuition/intuitionbase.h> #include<jiff.h>/*ILBlvl yapısı bu dosya içinde tanımlanıyor.*/ struct GfxBase *GfxBase; struct IntuitionBase *IntuitionBase; struct BitMap *bm; struct RastPort *rp; struct VievvPort *vp; struct Screen *scr; struct ILBM_info *ınfo; /* IFF yapısı */

struct NevvScreen sc=|

0, /* LeftEdge */ 0, /* TopEdge */ 320, /* Width */ 256, /* Height */ 5, /* Depth */ 0, /* DetailPen */ 1, /*BlockPen*/ NULL, /* VievvModes */ CUSTOMSCREEN, /* Type */ NULL, /* Font */ "Amiga Dunyasi", /* Default Title */ NULL, /* Gadgets */ NULL /* CustomBitMap */

char name[30]; UBYTE*m=0xbfe001;

main()

{ printf("Gormek istediğiniz resmin ismini giriniz TSn"); scanf("%s",name);

if(open_all()==0) {

printf("open erroriNn"); return(0); }

if(load()==0) {

Move(rp,0,100); Text(rp,"Resim bulunamadi!", 17); }

while(*m!=188);

close_all(); return(l);

}

palettes() /* resmin renk paleti */

{ ınt ı,r,g,b;

for(i=0;i<=15;i++)

{

r=info->cmap[3*i]/16; g=info->cmap[(3*i)+l]/16; b=info->cmap[(3*i)+2]/16; SetRGB4(vp,i,r,g,b); }

Klavyeyle gezinmek için ← ve → tuşları.