Aracılığıyla paylaş


Windows Imaging Bileşeni nasıl çalışır?

Bulma ve tahkim

Bir görüntünün kodunun çözülebilmesi için önce bu görüntü biçiminin kodunu çözebilecek uygun bir codec bileşeni bulunmalıdır. Çoğu sistemde desteklenen görüntü biçimleri sabit kodlanmış olduğundan bulma işlemi gerekmez. Windows Görüntüleme Bileşeni (WIC) platformu genişletilebilir olduğundan, görüntünün biçimini tanımlayabilmek ve uygun bir codec bileşeniyle eşleştirebilmek gerekir.

Çalışma zamanı bulmayı desteklemek için her görüntü biçiminin, bu biçim için uygun kod çözücüleri tanımlamak için kullanılabilecek bir tanımlayıcı deseni olmalıdır. (Benzersiz olacağı garanti edildiğinden, yeni dosya biçimleri için tanımlayıcı desen için bir GUID kullanmanız kesinlikle önerilir.) Tanımlayıcı desen, bu görüntü biçimine uygun her görüntü dosyasına eklenmelidir. Her kod çözücü, çözebileceği görüntü biçimlerinin tanımlayıcı desenini veya desenlerini belirten bir kayıt defteri girdisine sahiptir. Bir uygulamanın görüntü açması gerektiğinde WIC'den bir kod çözücü istemektedir. WIC, kayıt defterindeki kullanılabilir kod çözücüleri arar ve her kayıt defteri girdisinde görüntü dosyasına eklenmiş desenle eşleşen bir tanımlayıcı desen olup olmadığını denetler. Kod çözücü kayıt defteri girdileri hakkında daha fazla bilgi için bkz. Encoder-Specific Kayıt Defteri Girdileri

WIC, görüntüdeki tanımlayıcı desenle eşleşen tek bir kod çözücü bulduğunda, kod çözücü örneğini oluşturur ve görüntü dosyasını ona geçirir. WIC birden fazla eşleşme bulursa, her eşleşen kod çözücüde QueryCapability adlı bir yöntem çağırarak bunların arasında rastgele karar verme ve en iyi eşleşmeyi bulma. Daha fazla bilgi için IWICBitmapDecoder Uygulamaiçindeki QueryCapabilities bölümüne bakın.

Kod çözme

Uygun kod çözücü seçildikten ve örneklendikten sonra uygulama doğrudan kod çözücüyle konuşur. Kod çözücünün çeşitli arabirimler aracılığıyla uyguladığı çeşitli sorumlulukları vardır. Bu hizmetler şu şekilde sınıflandırılabilir:

  • Kapsayıcı düzeyinde hizmetler
  • Çerçeve düzeyinde hizmetler
  • Meta veri numaralandırma hizmetleri
  • Yerel kod çözücü dönüşümleri
  • İlerleme bildirimleri ve iptal desteği
  • Ham işleme hizmetleri

Kapsayıcı düzeyindeki hizmetler arasında en üst düzey küçük resim (destekleniyorsa), önizleme, renk bağlamları, palet (varsa) ve kapsayıcı biçimi alma ve kapsayıcı içindeki tek tek görüntü çerçevelerine erişim sağlama yer alır. (Bazı kapsayıcılar tek bir çerçeve içerirken, Etiketli Görüntü Dosya Biçimi (TIFF) gibi diğerleri birden çok kare içerebilir.) Bu hizmet kümesi, kod çözücü hakkında bilgi sağlamayı ve belirli bir görüntü dosyasıyla ilgili özelliklerini de içerir.

Bireysel çerçevelerin kendi küçük resimleri vardır ve aynı zamanda çerçeve düzeyinde erişilebilen kendi renk bağlamları, paletleri ve diğer özelliklere de sahip olabilirler. Ancak, çerçeve düzeyinde gerçekleştirilen en önemli işlem, bu çerçeve için görüntü bitlerinin gerçek kod çözme işlemidir.

WIC, en yaygın meta veri biçimleri (IFD, EXIF, IPTC, XMP, APP0, APP1 ve diğer biçimler) için meta veri okuyucular sağlar ve ayrıca üçüncü taraf meta veri biçimleri için genişletilebilirliği destekler. Bu, codec'i meta verileri ayrıştırma sorumluluğundan kurtarır. Ancak codec bileşeni, meta veri bloklarını listelemek ve her blok için bir meta veri okuyucu istemekle sorumludur. WIC, meta veri işleyicileri için keşif işlemini, codecler için olduğu gibi, meta veri işleyicilerinin kayıt defteri girdisindeki bir desenle eşleşen blok üst bilgisindeki bir desen üzerinden gerçekleştirir. Daha fazla bilgi için bkz. Encoder-Specific Kayıt Defteri Girdileri

Kod çözücülerin dönüştürme işlemlerini yerel olarak desteklemesi gerekmez, ancak bunu yapmak daha iyi bir son kullanıcı deneyimi sağlayan önemli performans iyileştirmeleri sağlar. Örneğin bir uygulama, görüntü işlenmeden önce bir görüntü üzerinde gerçekleştirilecek çeşitli dönüşümlerden (ölçeklendirme, kırpma, döndürme ve piksel biçimi dönüştürme) işlem hattı oluşturabilir. İşlem hatlarını dönüştürme hakkında daha fazla bilgi için IWICBitmapSourcebölümüne bakın. Bir dönüştürme işlem hattı oluşturduktan sonra uygulama, tüm dönüşümlerin görüntü kaynağına uygulanmasından kaynaklanan bit eşlemi oluşturmak için işlem hattında son dönüşümü istemektedir. Bu noktada, kod çözücü dönüştürme işlemlerini gerçekleştirebiliyorsa WIC, istenen dönüşümlerden hangisini gerçekleştirebileceğini sorar. Kod çözücüsü tarafından gerçekleştirilemeyen istenen dönüştürmeler, çağırana döndürülmeden önce kod çözme görüntüsünde WIC tarafından gerçekleştirilir. Bu iyileştirilmiş dönüştürme işlem hattı, özellikle kod çözme işlemi sırasında dönüşümlerin bir kısmı veya tamamı gerçekleştirilebiliyorsa, her dönüşümü sırayla bellekte gerçekleştirmekten daha iyi performans sağlar.

İlerleme bildirimleri ve iptal desteği, bir uygulamanın uzun işlemler için ilerleme durumu bildirimleri istemesini ve ayrıca uygulamanın kullanıcıya çok uzun süren bir işlemi iptal etme fırsatı vermesini sağlar. Bu önemlidir çünkü kullanıcı bir işlemi iptal edemezse işlemin kilitlendiğini hissedebilir ve uygulamayı kapatarak iptal etmeye çalışabilir.

Bu arabirimler, WIC destekleyen kod çözücü uygulama bölümündeayrıntılı olarak açıklanmıştır.

Ham işleme hizmetleri, ham bitleri işlemeden önce pozlama, karşıtlık ve keskinleştirme gibi kamera ayarlarını veya renk alanını değiştirmeyi içerir.

Kodlama

Kod çözücüler gibi kodlayıcıların da arabirimler aracılığıyla uyguladıkları sorumlulukları vardır. Kodlayıcıların sağladığı hizmetler, kod çözücüler tarafından sağlanan hizmetlere tamamlayıcı niteliktedir, ancak bunları okumak yerine görüntü verilerini yazar. Kodlayıcılar aşağıdaki kategorilerde hizmetler de sağlar:

  • Kapsayıcı düzeyinde hizmetler
  • Çerçeve düzeyinde hizmetler
  • Meta veri listeleme ve güncelleştirme hizmetleri
  • İlerleme bildirimi ve iptal desteği

Bir kodlayıcı için kapsayıcı düzeyinde hizmetler arasında en üst düzey küçük resim (destekleniyorsa), önizleme ve palet (varsa) ayarlama ve kapsayıcıda seri hale getirilebilmeleri için tek tek görüntü çerçeveleri arasında yineleme yer alır.

Kodlayıcının çerçeve düzeyindeki hizmetleri, görüntü verilerini, küçük resmi ve ilişkili paleti veya diğer bileşenleri okumak yerine yazmaları dışında, kod çözücü için verilen hizmetlere benzer.

Ayrıca, bir kodlayıcının meta veri numaralandırma hizmetleri, yazılacak meta veri bloklarında yinelemeyi ve meta verileri diske seri hale getirmek için uygun meta veri yazıcılarını çağırmayı içerir.

Bu arabirimler, WIC özellikli kodlayıcı uygulamabölümünde ayrıntılı olarak açıklanmıştır.

Codec bileşeninin ömrü

WIC codec, tek bir görüntüyü işlemek için örneklenir ve genellikle kısa ömürlüdür. Bir görüntü yüklendiğinde oluşturulur ve görüntü kapatıldığında serbest bırakılır. Bir uygulama, çakışan yaşam süreleriyle aynı anda çok sayıda codec bileşeni kullanabilir (yüzlerce görüntü içeren bir dizinde kaydırmayı düşünün) ve birden çok uygulama bunu aynı anda yapıyor olabilir.

Bazı codec'lerin yaşam süresi, içinde bulundukları işlemin ömrüyle belirlenmiş olsa da, WIC codec'lerinde bu durum geçerli değildir. Windows Vista Fotoğraf Galerisi, Windows Gezgini ve Fotoğraf Görüntüleyicisi'nin yanı sıra çok sayıda diğer uygulama WIC üzerinde oluşturulmuştur ve resimleri ve küçük resimleri görüntülemek için codec'inizi kullanır. Codec bileşeninizin ömrü, işlemin ömrü ile sınırlıysa, Windows Vista Gezgini'nde her bir görüntü veya küçük resim görüntülendiğinde, bu görüntünün kodunu çözmek için başlatılan codec, kullanıcı bilgisayarını bir sonraki kez yeniden başlatana kadar bellekte kalır. Codec bileşeniniz hiçbir zaman kaldırılmadıysa, sistemdeki başka bir bileşen tarafından kullanılamadığından kaynakları "sızdırılır".

WIC ile codec'i etkinleştirme

  1. Görüntülerin kodunu çözmek ve meta veri blokları arasında yinelemek için gerekli WIC arabirimlerini kullanıma sunan kapsayıcı düzeyinde bir kod çözücü sınıfı ve çerçeve düzeyinde kod çözücü sınıfı uygulayın. Bu, tüm WIC tabanlı uygulamaların standart görüntü biçimleriyle etkileşimde bulundukları şekilde codec'inizle etkileşim kurmasını sağlar.
  2. Görüntüleri kodlamak ve meta veri bloklarını bir görüntü dosyasında serileştirmek için gerekli WIC arabirimlerini kullanıma sunan kapsayıcı düzeyinde bir kodlayıcı sınıfı ve çerçeve düzeyinde kodlayıcı sınıfı uygulayın.
  3. Kapsayıcı biçiminiz bir TIFF veya JPEG kapsayıcısına dayalı değilse, ortak meta veri biçimleri (EXIF, XMP) için meta veri işleyicileri yazmanız gerekebilir. Ancak, TIFF tabanlı veya JPEG tabanlı kapsayıcı biçimi kullanıyorsanız, sistem tarafından sağlanan meta veri işleyicilerine temsilci seçebileceğiniz için bu gerekli değildir.
  4. Tüm görüntü dosyalarınıza benzersiz bir tanımlayıcı desen (GUID öneririz) ekleyin. Bu, bulma sırasında görüntü biçiminizin codec'inizle eşleşmesini sağlar. Var olan bir görüntü biçimi için WIC sarmalayıcı yazıyorsanız, kodlayıcının her zaman görüntü dosyalarına yazdığı ve bu görüntü biçimine özgü bir bit deseni bulmanız ve bunu tanımlayıcı desen olarak kullanmanız gerekir.)
  5. Codec bileşeninizi kurulum sırasında kaydedin. Bu, kayıt defterindeki tanımlayıcı deseni görüntü dosyasına eklenmiş desenle eşleştirerek codec'inizin çalışma zamanında bulunmasını sağlar.
  6. Windows 7'den itibaren WIC, codec'lerin COM daire modeli "Her ikisi de" olmasını gerektirir. Bu, çok iş parçacıklı senaryolarda daireler arası arayanları ve arayanları işlemek için uygun kilitlemeyi yapmanız gerektiği anlamına gelir. Daha fazla bilgi için, çok iş parçacıklı daire desteğiyle ilgili sonraki bölüme bakın.
  7. 64 bit platform desteği: Windows 7 için WIC, üçüncü taraf WIC codec'lerinin hem 32 bit hem de 64 bit yerel ikili dosyalar olarak teslim edilmesi gerekir. Ayrıca, 32 bit formun 64 bit sistemlere yüklenip çalıştırılması ve üçüncü taraf Windows 7 codec yükleyicisinin 64 bit sistemlere hem 32 bit hem de 64 bit ikili dosyaları yüklemesi gerekir.

WIC'de çok iş parçacıklı daire desteği

Çok İş Parçacıklı Daire (MTA) içindeki nesneler, MTA içindeki herhangi bir sayıda iş parçacığı tarafından eşzamanlı olarak çağrılabilir durumda olabilir. Bu, çok çekirdekli sistemlerde ve belirli sunucu senaryolarında daha iyi performans sağlar. Buna ek olarak, bir MTA'daki WIC codec'leri, farklı STA apartmanlarındaki iş parçacıkları arasında çağrı yapmaya bağlı düzenleme maliyeti olmadan MTA'daki diğer nesneleri çağırabilir. Windows 7'de, JPEG, TIFF, PNG, GIF, ICO ve BMP dahil olmak üzere tüm yerleşik WIC codec bileşenleri MTA'ları destekleyecek şekilde güncelleştirilmiştir. MtA'ları desteklemek için üçüncü taraf codec'lerin yazılması kesinlikle önerilir. MTA'ları desteklemeyen üçüncü taraf codec'ler, serileştirme nedeniyle çok iş parçacıklı uygulamalarda önemli performans maliyetlerine neden olur. MTA desteğinin etkinleştirilmesi, üçüncü taraf codec bileşeninde uygun eşitlemenin uygulanmasını gerektirir. Bu eşitleme tekniklerinin tam olarak uygulanması bu makalenin kapsamı dışındadır. COM nesnelerini eşitleme hakkında daha fazla bilgi için bkz. COM İkili Uygulama Modellerini Anlama ve Kullanma.

kavramsal

Giriş (WIC özellikli codec'i yazma)

WIC özellikli bir kod çözücü uygulamak

WIC özellikli codec nasıl yazılır

Windows Görüntüleme Bileşenine genel bakış

WIC meta verilerine genel bakış