  Ŀ
  Ŀ
                                                                          
                       Windows Simgelerinin Yaps                        
                                 (icon)                                   
  ٳ
                                                Serkan Girgin               
  




  Windows ile uraan herkes iin simgeler (ikonlar) en ok karlalan
  elerden biridir. Bu yalnzca Windows iin geerli deil. Birok grafik
  arabiriminde de simgelerin nemli bir rol vardr. Simgelerle daha nce hi
  ilgilenmemi olsanzda bu yaz sayesinde onlarn hakknda yeterince bilgiye
  sahip olabilirsiniz. Sanrm zellikle programc arkadalar ilgisini
  ekebilecek bir konu.



                  STANDART SMGE KTNN YAPISI
                  

  Bu yazda standart bir simge ktnn yaps zerinde duracam. Ancak
  dier simgeler iinde bilgiler bulabilirsiniz. ncelikle standart bir simge
  nedir bunu tanmlayalm. Standart bir simge 32 x 32 nokta byklndedir
  ve 16 renk ierir. Dosya uzunluu ise 766 bayttr.

  Bu 766 bayt balca 5 blmden meydana gelir. (ekil 1). Bu blmler :

         1. Ktk bal
         2. Simge izimine ait balk
         3. Renk paleti
         4. XOR maskesi
         5. AND maskesi

  lk iki blm adndanda anlalaca gibi kte ve simgeye ait bilgilerin
  bulunduu alanlar. Bu alanlar sayesinde herhangi bir dosyann simge ierip
  iermediini anlayabiliriz. Renk paletinde simgenin iziminde kullanlacak
  renklerin krmz, yeil ve mavi oranlar yer alr. (Bildiiniz gibi ekranda
  veya normal hayatta grdmz renkler bu  rengin karmlarndan meydana
  gelir). Xor ve And maskeleri ise simge ktnn en byk ve nemli blmn
  oluturuyor. Xor maskesi simgenin izimini, And maskesi ise simgenin ekrana
  nasl yanstlacana dair bilgileri (effaf,ters veya normal) ierir.
  lerde bu blmleri daha detayl olarak aklayacam.


           1    2        3                 4                    5
         Ĵ
          --- ----- ---------- ------------------------- ---------------
 Uzunluk: 22   40       64                512                  128      bayt


                ekil 1.  Simgenin blmlerinin ematik gsterimi


  1.Ktk Bal:

  Simge dosyasnn ilk 22 bay ktk baldr. Ktk bal simgenin
  bykl, renk says gibi bilgiler ierir. Bu blm kendini oluturan
  paralar halinde inceleyeceiz.

                 ñűűűűűűűűűű

                  1  2  3  4 5 6 7 8  9   10   11

  NOT : Herbir kutu bir bayt belirtir.

   1) Ayrlm
   2) Tip deikeni. Her zaman 1'e eittir.
   3) Dosyadaki simgelerin says. Bir simge dosyas birden fazla simge
      ierebilir. Dosyann iinde ka tane simgenin yer aldda bu iki
      baytta tutulur. Standart bir simge iin bu 1'e eittir.

      Bu 6 bayttan sonra gelen 12 bayt ise simgeye ait balk bilgisidir.
      Aslnda simge dosyas ne kadar simge ieriyorsa o kadar sayda simge
      balk bilgisine sahiptir. rnein 2 simge ieren bir dosyada 2 tanede
      simge bal vardr. Bu balklar ard arda yer alrlar. Blmlerini
      incelersek:

   4 ve 5) Simge boyutu. Ait olduu simgenin nokta cinsinden genilii ve
      boyu bu iki bayttan renilebilir. Standart bir simgede bu baytlarn
      ikiside 32'ye eittir.

   6) Simgenin renk says. Ait olduu simgenin ierdii renk saysdr.
      Standart bir simgede 16'ya eittir. (Srekli ait olduu diyorum ama bu
      gerekten nemli. nk yukarda da belirttiim gibi bir dosya birden
      fazla simge ierebilir.)

   7) Ayrlm.

   8) Simgenin para says. Simgenin ka para halinde tutulduunu daha
      dorusu simgenin ka plane'den olutuunu bildirir. Ekran modlaryle
      ilgilenen arkadalar bilirler plane konusu biraz kark bir olay.
      Zaten konumuz bu deil. Sadece bu blmn 1'e eit olmasnn
      gerektiini bilmeniz yeterli.

   9) Xor maskesinde 1 noktann ka bitle gsterileceini belirtir. Standart
      bir simge dosyasnda 4'e eittir. (Yani 1 baytla 2 noktay
      tanmlayabilirsiniz.)

  10) Ait olduu simgenin ka bayttan olutuu bu 4 bayttan renilebilir.
      Buradan renilen uzunluk ktk bal hari dier btn blmlerin
      toplamna eittir. Standart simgede 744'dr.

  11) Ait olduu simgenin nerede baladn bildirir. Standart simge dosyas
      iin fazla bir nemi yok. nk simge ktk balndan sonra yer alr.
      Ancak birden fazla simge ieren bir dosyada nemi ok byk. rnein
      2. veya 3. simgenin balang adresleri en kolay kendilerine ait simge
      balnda bu yerden renilebilir. Burada simgeden kastettiim ktk
      bal hari 10. kta belirtilen blm.


  Bylece ktk baln aklam olduk. Bu blm sayesinde daha dorusu
  simge bal sayesinde daha nce yazdm gibi bir dosyann standart simge
  dosyas olup olmadn anlayabiliriz. Sizin de tahmin edebileceiniz gibi
  yapmamz gereken ilem basamaklar yle:

     Dosya uzunluunun kontrol (=766)
     Dosyann iinde ka simge bulunduu (=1)
     Simgenin boyutlar (=32,32)
     Simgenin ierdii renk says (=16)

  Eer dosya bu artlara uyuyorsa bir simge dosyas demektir. Burada herhangi
  bir dilde rnek program vermek istemiyorum. Herkesin kendi bildii
  dilde yazmas daha doru. Yeterli bilgiyi yukarda verdiimi sanyorum.


  2.Simge izimine Ait Balk:

  Sanrm hereyi Trke vermeye almakla baz eyleri zora sokuyorum.
  Simge izimine ait balk demekle bitmap baln kastettiimi sylemem
  sanrm hereyi daha ak bir hale getirir. Bu blmde yukardaki gibi
  paralar halinde inceleyelim.

                   ñűűűűűűű...

                    1    2    3    4  5  6    7    8

    NOT : Herbir kutu bir bayt belirtir.

    1) Bitmap balnn uzunluunu verir. 40'a eittir.
    2 ve 3) Simgenin geniliini ve boyunu verir. Standart simge dosyasnda
       genilik 32'ye eittir. Ancak boyun hem And hemde Xor maskesini
       ierdii iin 32+32=64 'tr.
    4) Simgenin ka paradan olutuunu bildirir.
    5) Xor maskesinde 1 noktann ka bitle gsterileceini bildirir.
    6) Sktrma olup olmad. 0'a eittir.
    7) Simge iziminin uzunluu. Standart bir simge iin 640'a eittir.
       (512 bayt Xor maskesi + 128 bayt And maskesi)
    8) Gereksiz veya Kullanlmayan alanlar.

    Grdnz gibi buradaki ou bilgi ktk balnda yer alyor. Bu yzden
    ksaca belirterek getim. Hangisi iinize gelirse onu kullanrsnz.


  3.Renk Paleti:

  Bir simge dosyasnda izim balndan sonra palet blm yer alr. Standart
  bir simge iin balang adresi 63. bayttr. 16 renklik bir paletin uzunluu
  ki bu normal bir simgenin paletidir, 64 bayttr. Her renk 4 bayt ile
  tanmlanr.

                    Ĵ
                      Mavi    Yeil  Krmz -------

  ekilde de grld gibi 4. bayt kullanlmyor. Ayrca bilmem dikkatinizi
  ektimi ama renk bileenleri ters olarak konulmu. Normalde RGB olmas
  gerekirken BGR olarak yerletirirmi. Bu ters yazmlar sanrm Microsoft'un
  orjinalliklerinden biri. Neden byle dediimi ilerde anlayacaksnz. Her
  neyse biz konumuza dnelim. Genellikle standart bir simgede kullanlan
  palette 6 say kullanlr. Bu alt saynn ikisi kesinlikle 0 ve 255'dir.
  Hepsi 0 olan siyah rengi, hepsi 255 olan beyaz rengi tanmlar. Dier 
  saydan iki tanesi ak ve koyu gri renklerin tanmlanmasnda kullanlr.
  Gri renk her  tonunda ortak karmndan elde edildii iin her ndede
  ortak olan (0 ve 255 hari) byk say ak griyi, kk say koyu griyi
  tanmlar. Kalan saylarn 0 ile yapt kombinasyonlar dier renkleri
  oluturur.

  Simge dosyalar genelde aadaki gibi bir palete sahiptirler:

                  Mavi  Yeil Krmz    Mavi  Yeil Krmz
              Ŀ
               1.  0    0     0    9.  z    z     z   
               2.  x    0     0   10.  w    0     0   
               3.  0    x     0   11.  0    w     0   
               4.  x    x     0   12.  w    w     0   
               5.  0    0     x   13.  0    0     w   
               6.  x    0     x   14.  w    0     w   
               7.  0    x     x   15.  0    w     w   
               8.  y    y     y   16. 255  255   255  
              

  Bu sra deiebilir ancak yaplar deimez. Tahmin edebileceiniz gibi
  y ve z gri renkleri (hangisi daha bykse o ak gri) tanmlar. X ve w
  ierisinden hangisi daha bykse onu ienen yaplar ak, dierini
  ierenlerse koyu renkleri tanmlar.


  4.XOR Maskesi:

  Gelelim simgenin izimini ieren Xor maskesine. Standart bir simge
  dosyasnda bu blm 512 bayttr. 1 piksel 4 bit ile tanmland ve 1 bayt 8
  bitten olutuu iin 1 bayt ile 2 piksel tanmlanabilir.

                          1. pixel     2.pixel

                        ۴
                         ----------- -----------
                          st bitler  alt bitler
                           (8 - 5)     (4 - 1)

  Piksel sahip olduu saynn simge paletindeki karl olan renk ile ekrana
  yanstlr. (effaflk gibi durumlar hari). Yalnz dikkat edilmesi gereken
  bir nokta var. O da simge iziminin dosyada ters olarak yer almas.
  Ltfen ekil 4'e bakn.


                  Ŀ     Ŀ
                                           
                                               
                                               
                                               
                                           
                       
                    Normal hali         Dosyadaki hali

             ekil 4.  Simgenin normal ve dosyada yer alan hali


  Yukardaki ekilde de grld gibi en stteki satr en alta, onu takip
  eden satrlarda onun stne gelecek ekilde dosyaya yerletirilmi. Bu
  nedenle eer kendi programnzda simgeleri ekrana izmek istiyorsanz nce
  izimi dzeltmelisiniz. Standart bir simge dosyas iin yapmanz gereken
  ilem Xor maskesinin sonundan aldnz 16'ar baytlk paralar baa
  eklemek ve bu ilemi 512/16=32 defa tekrarlamak. Benzer bir ilemi And
  maskesi iinde uygulamanz gerekiyor. Bunu ilerde anlatacam.


  5.AND Maskesi:

  Bu blmde simgenin en nemli paralarndan biri. Byle olmasnn nedeni
  simgenin ekrana izimini dorudan etkilemesi. Ne kadar iyi izilmi bir
  simge olursa olsun and maskesi bozuksa dzgn gzkmesini beklemeyin.

  And maskesi iin gerekli olan deerler 1 ve 0'dr. Bu nedenle 1 piksel
  1 bit ile tanmlanabilir. 1 baytta 8 bit olduuna gre 32x32'lik stnadart
  bir simge iin and maskesi 128 bayt uzunluundadr.(ekil 5). ncedende
  dediim gibi and maskeside xor maskesi gibi dosyada ters yer alyor. Bu
  nedenle and maskesinide dzeltmelisiniz. Dzeltme ilemi xor maskesindeki
  gibidir. Ancak 4'er baytlk gruplar halinde ilem yaplmal.



                     Chr$(255) ----> 1 1 1 1 1 1 1 1
                                     \-------------/
                                     8 pixelin durumu

                  ekil 5.  1 bayt ile tanlanan 8 piksel


  Gelelim And maskesinin grevine. Eer Windows'ta dikkat ettiyseniz simge
  iziminde veya simgeleri hareket ettirirken baz yerlerin izildiini
  bazlarnn ise olduu gibi brakldn grrsnz. te bu izilip
  izilmeme durumu and maskesi tarafndan salanyor. Eer bir pikselin and
  maskesinde tanmlanan deeri 0 ise bu durumda o piksel xor maskesindeki
  deerli ile ekrana baslr. rnein and deeri 0, xor deeri 15 ise ve
  palette 15. renk beyaz tanmlamsa ekranda belirlenen kordinat beyaz renk
  alr. Eer bir pikselin and maskesinde tanmlanan deeri 1, xor maskesinde
  tanmlanan deeri 0 ise bu durumda o piksel ekrana yanstlmaz yani o
  kordinattaki piksel eskisi gibi kalr. Ve son olarak bir pikselin ters
  rengiyle ekrana baslmas salanabilir. Yani eer pikselin gerek rengi ak
  gri ise koyu gri ile ekrana yanstlr. Bunun iin pikselin and maskesindeki
  deeri 1, xor maskesindeki deeri ise 15 olmal. (Hexedecimal F). Ancak bu
  zellik o kadar sk kullanlmyor.



  Benden Bu Kadar

  Sanrm artk bir simge dosyasnn yaps hakknda yeterince bilgiye
  sahipsiniz. Kendi kendinize altrmalar yaparak her eyi daha iyi
  anlayacanza inanyorum. ncelemeniz iin rnek simge dosyalar diskette
  yer alyor. zellikle And maskesini anlamak iin rnekleri Windows iinden
  aarak bakmanz anlamanz kolaylatacaktr. Eer bir sorunuz olursa bana
  yazmaktan ekinmeyin. Bu sadece simgeler konusunda olmayabilir. Programclk
  zelliklede Basic ve interruptlar konusundaki sorunlarnza yardmc olmaya
  alrm. Adresimi en altta bulabilirsiniz.

  Bu byle bir yerde yazdm ilk yaz olduu iin hatalarm olabilir. Bunlar
  iin sizden zr dilerim. Bu arada size son bir bilgi daha. BMP dosyalarn
  biraz inceleyin bakalm simgelerle bir benzerlik bulabilecekmisiniz.
  (Xor maskesine dikkat!)

  Hepinize bol ans ve baarlar dilerim. zellikle de Altn Disket 94'e
  hazrlanan arkadalara.


           Adresim : Serkan GRGN
                     8. cadde 83.sokak 7/4
                     06510   Emek / ANKARA