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.
F.Kağan Gürkaynak<br />
Bu ay sizlere Electronic Arts tarafından geliştirilen IFF formatında kaydedilmiş resimleri Basic'ten yüklemek ve kaydetmek<br />
için gerekli olan bilgileri ve programcıkları sunmak istiyorum. Bilindiği üzere <strong>Amiga</strong>'nın çok gelişmiş bir resim standardı<br />
mevcut. Bu standardın en büyük rahatlığı, neredeyse her resim programında, diğer programlar tarafından geliştirilmiş resimleri<br />
görebilmeniz. Klasik bir <strong>Amiga</strong> kullanıcısı bu durumu olağan karşılayacaktır. Ancak başka bilgisayarlardan tecrübesi<br />
olanlar, <strong>Amiga</strong>'da bulunan standardın değerini bileceklerdir. IFF aralarında değiştirebilecekleri dosya tanımı anlamına gelen<br />
Interchangeable File Format'tan gelmektedir. (Nedense Türkiye'de ben dahil eski <strong>Amiga</strong>cılardan çoğu bu kısaltmayı AY Fİ Fİ<br />
olarak okurken, daha yeniler hep doğru olan AY EF EF demekte). Söylemeden geçmeyelim IFF'in en büyük özelliklerinden<br />
birisi, sadece resim değil, yazı, animasyon, müzik ve örneklenmiş seslerinde aynı dosya formatında saklanabilmesine olanak<br />
sağlıyor. Bu esnekliği sağlayabilmek için ise bu formana kaydedilmiş dosyaların başında belirleyici bir bölüm bulunur. Bu<br />
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<br />
bakmak yeter.). Bundan sonra gelen Long'da ise (Bir long= 2 word= 4 byte) dosyanın byte cinsinden uzunluğu bulunur.<br />
Üçüncü long ise dosyada bulunan verinin türünü belirler. Bu bölümlerin belli başlıları şunlardır:<br />
ILBM Grafik dosyası SMUS Müzik dosyası FTXT Formatlı yazı dosyası<br />
8SVX Örneklenmiş ses dosyası ANIM Animasyon dosyası<br />
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<br />
geliyor. Resim saklanan ILBM ile tanımlanan dosyalarda bulunan chunkların bazıları ve içerdikleri bilgiler şunlardır:<br />
BMHD Grafik genel özelliklerini taşır CMAP Renk paletini taşır<br />
CRNG Cycle özelliğine ilişkin bilgileri taşır BODY Resim datalarının kendisini taşır.<br />
Tüm bu ön bilgilerden sonra bir IFF resim dosyasının baş kısmına bir örnek verelim:<br />
Uzunluk İçerik (Mesela) Anlamı Uzunluk İçerik (Mesela) Anlamı<br />
LONG . "FORM" Bir IFF dosyası LONG "CMAP" Renkler buradan sonra gelecek<br />
LONG 40156 Dosyanın uzunluğu LONG 96 Bu bölümün uzunluğu<br />
LONG "ILBM" Bu bir Resim dosyası BYTE'lar 43,12,76,... Renk kodları (Örnekte 96 byte)<br />
LONG "BMHD" Grafiğe ilişkin genel bilgiler LONG "BODY" Asıl bölüm<br />
LONG 20 Bu bölümün uzunluğu (Byte olarak) LONG 40000 Bu bölümün uzunluğu<br />
BYTE'lar 20,34,45... Genel bilgiler (Örnekte 20 byte) BYTE'lar 65,22,87,.. Resim verileri<br />
Eğer bir IFF dosyası okuyacaksak ilk olarak bu baş kısmı anlayabilecek bir program yapmalıyız. Herhalde merak ettiğiniz<br />
konu resim ile ilgili bilgilerin neler olduğu ve nasıl okunacağıdır. BMHD kısmı şu şekilde oluşturulur:<br />
Uzunluk İsim Anlamı Uzunluk İsim Anlamı<br />
WORD Width Resmin genişliği BYTE Dummy Anlamsız<br />
WORD Height Resmin yüksekliği WORD TransColor 'Saydam' olan renk numarası(g6nelde 0)<br />
WORD Xpos Resmin ekranın sol kenarından uzaklığı BYTE Xaspect Genişliğin yüksekliğe oranı<br />
WORD Ypos Resmin ekranın üstünden uzaklığı BYTE Yaspect Yüksekliğin genişliğe ofanı<br />
BYTE Depth Resmin derinliği (*) WORD PageWidth Ekran genişliği<br />
BYTE Masking Bitmap maskesinin dahil olup olmadığı WORD PageHeight Ekran yüksekliği<br />
BYTE Compr Dosya sıkışık mı (1= evet, 0 =hayır)<br />
(*) 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<br />
sözkonusudur. Burada derinlik olarak 6 bulunabilir. Bu ise özel resim modlarındandır. Library desteği olmaksızın Basic'te<br />
gerçekleştirilemezler (Bunlar Extra Half bright ve HAM modlarına ait).<br />
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ı<br />
ç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<br />
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<br />
programınıza bu ekstraları eklemek zahmetinden kurtulabilirsiniz. Diğer sıkıştırılmış resimleri ise çeşitli utilityler ile (Mesela<br />
Pixmate) açabilirsiniz. (Power Packer gibi Cruncherları kullanmayın !!!!)<br />
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<br />
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<br />
!!!) İşte şimdi size IFF formatında kaydedilmiş resimleri yükleyebilen bir program sunuyorum:<br />
Program "Amir.r.Amir"<br />
BAŞLAMA:<br />
CLS<br />
DEFLNG a-z<br />
INPUT "RESİM: ",PlcName$<br />
DOS YANIN BASI:<br />
OPEN PicName$ FOR INPUT AS 1<br />
bo$=INPUT$(12,1)<br />
BMHD:<br />
<br />
BMHD$=INPUT$(4,1)<br />
IF BMHD$"BMHD" THEN END<br />
bo$=INPUT$(4,1)<br />
en=CVI(INPUT$(2,1))<br />
boy=CVI(INPUT$(2,1))<br />
bo$=INPUT$(4,1)<br />
Derin=ASC(INPUT$(1,1))<br />
bo$=INPUT$(1,1)<br />
Compression=ASC(INPUT$(1,1))<br />
bo$=INPUT$(5,1)<br />
PWidth=CVI(INPUT$(2,1))<br />
PHeight=CVI(INPUT$(2,1))<br />
IF PWidth=320 THEN<br />
IF PHeight>350 THEN Mode=3 ELSE Mode=1<br />
ELSE<br />
IF PHeight>350 THEN Mode=4 ELSE Mode=2<br />
END IF<br />
ScreenACALIM:<br />
SCREEN 1,en,boy,Derin,Mode<br />
WINDOW 1„,0,1<br />
RastPort&=WINDOW(8)<br />
BitMapStr&=PEEKL (RastPort&+4)<br />
FOR i=0 TO 4<br />
BitMap&(i)-PEEKL(BitMapStr&+8+i*4)<br />
NEXT i<br />
Color Read:<br />
WHILE CMap$"CMAP"<br />
CMap$=INPUT$(4,1)<br />
WEND<br />
bo$=INPUT$(4,1)<br />
FOR RenkNr=0 TO (2 A Derin-1)<br />
r#=(ASC(INPUT$(1,1 )))/256<br />
g#=(ASC(INPUT$(1,1 )))/256<br />
b#=(ASC(INPUT$(1,1 )))/256<br />
PALETTE RenkNr,r#,g#,b#<br />
NEXT RenkNr<br />
BodyRead:<br />
WHILE bo$+dy$"BODY"<br />
bo$=INPUT$(2,1)<br />
dy$=INPUT$(2,1)<br />
IFdyS^'BO-'THEN<br />
IF INPUT$(2,1)= ,, DY" THEN bo$="BO" : dy$="DY"<br />
END IF<br />
<br />
AMIGA DÜNYASI 94