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.

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

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

Saved successfully!

Ooh no, something went wrong!