Makale Özeti

Bu makalede dijital bir fotoğraf makinasıyla çekilmiş bir fotoğrafın kaydı sırasında makina tarafından dosyaya oluşturulan bilgileri dosyadan nasıl okuyacağımızı inceleyeceğiz. Bilgilerin tutulduğu kısma exif dosyası denir. Exif dünyaca bir standarttır ve en son v2.2'si mevcuttur.

Makale

         Merhabalar,

         Makale dizimizin bu ikinci bölümünde bir önceki makalede bulunan enum classını yazdıktan sonra sıra Resmimizin özelliklerini tutacağımız nesnemizi yazmaya gelmişti. Bu nesnede hangi özelliğin hangi değeri taşıdığını tutacağız. Şimdi bu nesneyi yazalım.
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace DigitalImageSummaryReader
{
    public class DigitalImageProperty
    {
        public DigitalImageProperty()
        { }
        public DigitalImageProperty(string pPropertyName, string pPropertyValue)
        {
            mPropertyName = pPropertyName;
            mPropertyValue = pPropertyValue.Replace("_"," ");
        }
        private string mPropertyName;
        public string PropertyName
        {
            get { return mPropertyName; }
            set { mPropertyName = value.Replace("_"," "); }
        }
        private string mPropertyValue;
        public string PropertyValue
        {
            get { return mPropertyValue; }
            set { mPropertyValue = value; }
        }
    }
}
          Bu Classta iki tane property var ve bu propertylerden biri dijital resimlere ait özelliğin adını diğeri ise bu özelliğin değeri taşımaktadırlar ve ikiside private memberları encapsule ederek değerlerini saklamaktadırlar. Bunun yanı sıra bu iki propertynin değerlerini parametre olarak alan ve bunları propertylere atayan bir Constructor (Yapıcı Metod) yazılmıştır. Şimdi ise sırada bu nesnemizin koleksiyonunu saklayacağımız Collection Sınıfını yazmaya geldi.
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
 
namespace DigitalImageSummaryReader
{
    public class DigitalImagePropertyCollection : CollectionBase, ICollection<DigitalImageProperty>, IEnumerable<DigitalImageProperty>
    {
 
        #region ICollection<DigitalImageProperty> Members
 
        public void Add(DigitalImageProperty item)
        {
            InnerList.Add(item);
        }
        public void Add(string pPropertyName, string pPropertyValue)
        {
            InnerList.Add(new DigitalImageProperty(pPropertyName, pPropertyValue));
        }
 
        public void Clear()
        {
            InnerList.Clear();
        }
 
        public bool Contains(DigitalImageProperty item)
        {
            return InnerList.Contains(item);
        }
 
        public void CopyTo(DigitalImageProperty[] array, int arrayIndex)
        {
            InnerList.CopyTo(array, arrayIndex);
        }
 
        public int Count
        {
            get { return InnerList.Count; }
        }
 
        public bool IsReadOnly
        {
            get { return InnerList.IsReadOnly; }
        }
 
        public bool Remove(DigitalImageProperty item)
        {
            InnerList.Remove(item);
            return true;
        }
 
        #endregion
 
       
 
        #region IEnumerable Members
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            return (IEnumerator)InnerList.GetEnumerator();
        }
 
        #endregion
 
        #region IEnumerable<DigitalImageProperty> Members
 
        IEnumerator<DigitalImageProperty> IEnumerable<DigitalImageProperty>.GetEnumerator()
        {
            return (IEnumerator<DigitalImageProperty>)InnerList.GetEnumerator();
        }
 
        #endregion
    }
}
          Bu standart bir Generic Collection classıdır. Bunun için bu metodların açıklamasını burada yapmayacağım ancak bunun ile ilgili olarak Özel Bir Collection isimli makale dizimi ilk bölümünden itibaren okumanızı tavsiye ederim. Şimdi ise Exif bilgilerini dosyadan okuyacağımız programımızın temel yapı taşını oturan Class'ımızı yazacağız.
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Collections;
using System.Drawing.Imaging;
 
namespace DigitalImageSummaryReader
{
    public class ExifInformation
    {
        private Image mImage;
        private DigitalImagePropertyCollection mCollection;
        public DigitalImagePropertyCollection Collection
        {
            get { return mCollection; }
            set { mCollection = value; }
        }
        private ASCIIEncoding encoding = new ASCIIEncoding();
        public ExifInformation(Image parImage)
        {
            mImage = parImage;
            mCollection = new DigitalImagePropertyCollection();
        }
          Bu metodumuzun içinde resim dosyasını tutacağımız Image veri tipinden bir private değişken tanımlıyoruz. Daha sonrasında ise Bir önceki kısımda yazdığımız collection tipi cinsinden bir değişken ve bu değişkenı encapsule eden property'i yazıyoruz. Daha sonrasında ise byte dizisinin string e çevirmekte kullanacağımız Encoding tipini ASCIIEncoding cinsinden tanımlıyoruz. Class'ımızın bir tane Constructor'u var ve bu constructor bizden parametre olarak resim alıyor. Daha sonrasında parametre olarak aldığı bu değişkeni tanımladığımız private değişkene atıyor ve Collection nesnemizin bir örneğini alarak onuda property tarafından encapsule edilen değere referans olarak atıyor. Bır sonraki makalede ise kodumuzun geri kalanı ve esas önemli kısmını inceleyip bir örnek yapalım.

oztamer@hotmail.com
tamer.oz@yazgelistir.com
oztamer@hotmail.com
Örnek Kodlar