Amiga Dünyası sayı 19, sayfa 80

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 80

Bu ay sizlere Electronic Arts tarafından geliştirilen IFF formatında kaydedilmiş resimleri Basic'ten yüklemek ve kaydetmek için gerekli olan bilgileri ve programcıkları sunmak istiyorum. Bilindiği üzere Amiga'nın çok gelişmiş bir resim standardı mevcut. Bu standardın en büyük rahatlığı, neredeyse her resim programında, diğer programlar tarafından geliştirilmiş resimleri görebilmeniz. Klasik bir Amiga kullanıcısı bu durumu olağan karşılayacaktır. Ancak başka bilgisayarlardan tecrübesi olanlar, Amiga'da bulunan standardın değerini bileceklerdir. IFF aralarında değiştirebilecekleri dosya tanımı anlamına gelen Interchangeable File Format'tan gelmektedir. (Nedense Türkiye'de ben dahil eski Amigacılardan çoğu bu kısaltmayı AY Fİ Fİ olarak okurken, daha yeniler hep doğru olan AY EF EF demekte). Söylemeden geçmeyelim IFF'in en büyük özelliklerinden birisi, sadece resim değil, yazı, animasyon, müzik ve örneklenmiş seslerin de aynı dosya formatında saklanabilmesine olanak sağlıyor. Bu esnekliği sağlayabilmek için ise bu formata kaydedilmiş dosyaların başında belirleyici bir bölüm bulunur. Bu bölüm her zaman FORM harfleriyle başlar. (Herhangi bir dosyanın IFF olup olmadığını anlayabilmek için ilk dört byte'ına bakmak yeter.). Bundan sonra gelen Long'da ise (Bir long= 2 word= 4 byte) dosyanın byte cinsinden uzunluğu bulunur. Üçüncü long ise dosyada bulunan verinin türünü belirler. Bu bölümlerin belli başlıları şunlardır:

ILBM Grafik dosyası SMUS Müzik dosyası FTXT Formatlı yazı dosyası 8SVX Örneklenmiş ses dosyası ANIM Animasyon dosyası Bizi bu aşamada sadece ILBM ilgilendiriyor. Bu bölümün arkasından (Her türe göre değişen) ve Chunk adı verilen alt bölümler geliyor. Resim saklanan ILBM ile tanımlanan dosyalarda bulunan chunkların bazıları ve içerdikleri bilgiler şunlardır:

BMHD Grafik genel özelliklerini taşır CMAP Renk paletini taşır CRNG Cycle özelliğine ilişkin bilgileri taşır BODY Resim datalarının kendisini taşır. Tüm bu ön bilgilerden sonra bir IFF resim dosyasının baş kısmına bir örnek verelim: Uzunluk İçerik (Mesela) Anlamı Uzunluk İçerik (Mesela) Anlamı LONG . "FORM" Bir IFF dosyası LONG "CMAP" Renkler buradan sonra gelecek LONG 40156 Dosyanın uzunluğu LONG 96 Bu bölümün uzunluğu LONG "ILBM" Bu bir Resim dosyası BYTE'lar 43,12,76,... Renk kodları (Örnekte 96 byte) LONG "BMHD" Grafiğe ilişkin genel bilgiler LONG "BODY" Asıl bölüm LONG 20 Bu bölümün uzunluğu (Byte olarak) LONG 40000 Bu bölümün uzunluğu BYTE'lar 20,34,45... Genel bilgiler (Örnekte 20 byte) BYTE'lar 65,22,87,.. Resim verileri Eğer bir IFF dosyası okuyacaksak ilk olarak bu baş kısmı anlayabilecek bir program yapmalıyız. Herhalde merak ettiğiniz konu resim ile ilgili bilgilerin neler olduğu ve nasıl okunacağıdır. BMHD kısmı şu şekilde oluşturulur: Uzunluk İsim Anlamı Uzunluk İsim Anlamı WORD Width Resmin genişliği BYTE Dummy Anlamsız WORD Height Resmin yüksekliği WORD TransColor 'Saydam' olan renk numarası(genelde 0) WORD Xpos Resmin ekranın sol kenarından uzaklığı BYTE Xaspect Genişliğin yüksekliğe oranı WORD Ypos Resmin ekranın üstünden uzaklığı BYTE Yaspect Yüksekliğin genişliğe oranı BYTE Depth Resmin derinliği (*) WORD PageWidth Ekran genişliği BYTE Masking Bitmap maskesinin dahil olup olmadığı WORD PageHeight Ekran yüksekliği BYTE Compr Dosya sıkışık mı ? (1= evet, 0 =hayır)

(*) Derinlik bir resmin kaç renkten oluşacağını belirler. Derinlik 1 ise 2, 2 ise 4, 3 ise 8, 4 ise 16 ve 5 ise 32 renkli grafikler söz konusudur. Burada derinlik olarak 6 bulunabilir. Bu ise özel resim modlarındandır. Library desteği olmaksızın Basic'te gerçekleştirilemezler (Bunlar Extra Half bright ve HAM modlarına ait).

BMHD'da bulunan bu sayıların hepsi bizim için ilginç değil. Ne var ki dosyanın sıkıştırılmış olup olmadığını gösteren kısmı çok önemli. Eğer resim sıkıştırılmamışsa resmi doğrudan okuyabiliriz ancak resim sıkıştırılmışsa resmi yazmadan önce eski haline getirmek olmalı. Dosyanın nasıl sıkıştırıldığını uzun uzun anlatmayacağım, sıkıştırılmamış dosyalarla çalışarak programınıza bu ekstraları eklemek zahmetinden kurtulabilirsiniz. Diğer sıkıştırılmış resimleri ise çeşitli utilityler ile (Mesela Pixmate) açabilirsiniz. (Power Packer gibi Cruncherları kullanmayın !!!!)

Sıkıştırma sistemi şu prensibe dayanıyor. Diyelim dosya şöyle bir şey olsun: 0,0,0,0,0,0,0,1,1,1,1,2,2,2........ gibi değerler yerine; 7,0,4,1,3,2,... yazılıyor . Bu yazış tarzı ile önce kaç adet daha sonra ise hangi veriden yazılacağı belirtiliyor..(Çok kabaca !!!) İşte şimdi size IFF formatında kaydedilmiş resimleri yükleyebilen bir program sunuyorum:

Program "Amir.r.Amir" n BAŞLAMA:

CLS DEFLNG a-z INPUT "RESİM: ",PlcName$

DOS YANIN BASI:

OPEN PicName$ FOR INPUT AS 1 bo$=INPUT$(12,1)

BMHD:

BMHD$=INPUT$(4,1) IF BMHD$<>"BMHD" THEN END bo$=INPUT$(4,1) en=CVI(INPUT$(2,1)) boy=CVI(INPUT$(2,1)) bo$=INPUT$(4,1) Derin=ASC(INPUT$(1,1)) bo$=INPUT$(1,1) Compression=ASC(INPUT$(1,1)) bo$=INPUT$(5,1) PWidth=CVI(INPUT$(2,1)) PHeight=CVI(INPUT$(2,1)) IF PWidth=320 THEN

IF PHeight>350 THEN Mode=3 ELSE Mode=1 ELSE

IF PHeight>350 THEN Mode=4 ELSE Mode=2 END IF

ScreenACALIM: o SCREEN 1,en,boy,Derin,Mode WINDOW 1„,0,1 RastPort&=WINDOW(8) BitMapStr&=PEEKL (RastPort&+4) FOR i=0 TO 4

BitMap&(i)-PEEKL(BitMapStr&+8+i*4) NEXT i

Color Read:

WHILE CMap$<>"CMAP"

CMap$=INPUT$(4,1) WEND bo$=INPUT$(4,1) FOR RenkNr=0 TO (2ADerin-1)

r#=(ASC(INPUT$(1,1 )))/256 g#=(ASC(INPUT$(1,1 )))/256 b#=(ASC(INPUT$(1,1 )))/256 PALETTE RenkNr,r#,g#,b# NEXT RenkNr

BodyRead:

WHILE bo$+dy$<>"BODY"

bo$=INPUT$(2,1) dy$=INPUT$(2,1) IFdyS^'BO-'THEN IF INPUT$(2,1)=,,DY" THEN bo$="BO" : dy$="DY" END IF

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