Aracılığıyla paylaş


WIC Meta Verilerine Genel Bakış

Bu konu başlığında, Windows Imaging Bileşeni (WIC) tarafından sağlanan görüntüleme meta verileri desteği tanıtılmaktadır. Görüntü meta verilerini, meta veri sorgu dilini ve meta veri işleyicisi genişletilebilirliğini okuma ve yazma işlemlerine giriş sağlar.

Görüntü meta verileri, görüntüyü yakalamak için kullanılan cihaz veya görüntünün boyutları gibi görüntü hakkında ek bilgiler sağlayan bir görüntü dosyasının içine eklenmiş verilerdir. Görüntü dosyasının içinde yer alsa da, bu meta veriler işleme verilerinin bir parçası değildir. WIC, Genişletilebilir Meta Veri Platformu (XMP), Değiştirilebilir Görüntü Dosyası (EXIF) ve Png Metin Verileri (tEXt) gibi birçok yaygın meta veri biçimi için bu meta verileri okumanızı ve yazmanızı sağlayan arabirimler sağlar.

Bu konu aşağıdaki bölümleri içerir.

Önkoşullar

Bu konuyu anlamak için, Windows Imaging Bileşenine Genel Bakışaçıklandığı gibi WIC kodlayıcı ve kod çözücü arabirimleri ve bunların ilgili Bileşen Nesne Modeli (COM) bileşenleri hakkında bilgi sahibi olmanız gerekir. Ayrıca, günümüzde kullanılan bazı görüntüleme meta veri biçimleri hakkında genel bir bilgi sahibi olmanıza yardımcı olur.

Giriş

Meta veriler bir görüntü hakkında genişletilmiş bilgiler sağlar. Bu bilgiler çeşitli şekillerde kullanılabilir. Resim açıklama, derecelendirme, kategori etiketleri ve telif hakkı bilgileri gibi meta veriler içerebilir. Meta verilere erişmek varlık yönetimi, dosya konumu veya telif hakkı bilgilerini belirleme gibi görevlerin gerçekleştirilmesini kolaylaştırır. Örneğin, Windows Vista'daki Windows Fotoğraf Galerisi resimlere açıklama ve kategori etiketleri eklemenize olanak tanır. Bu, görüntülerin daha iyi keşfedilmesini ve görüntüleri kategorilere ayırmanın kullanışlı bir yolunu sağlar. WIC API'lerini ve yaygın meta veri biçimlerini kullanarak, uygulamalar bu tür meta verileri resimlere veya görüntülerden kolayca yazabilir veya okuyabilir.

Aşağıdaki diyagramda, eklenmiş meta veri blokları ve meta veri öğeleri içeren bir JPEG dosyasının içeriği gösterilmektedir.

derecelendirme meta verileri ile jpeg görüntüsü

Bu örnek görüntüde, meta veriler bir görüntü çerçevesi içinde görüntü dosyasına eklenir. JPEG biçimi birden çok görüntü çerçevesini desteklemez, bu nedenle meta veriler kavramsal olarak bu tek kareye eklenir. TIFF gibi birden çok kareyi destekleyen biçimlerde, bu diyagramda gösterildiği gibi her görüntü çerçevesine meta veriler eklenmiş olabilir. Günümüzde yaygın olmasa da ve yerel görüntü codec'leri tarafından desteklenmese de, bazı görüntü biçimleri görüntü çerçevesi dışındaki meta verileri de destekleyebilse de. WIC, hem kare düzeyinde meta verileri hem de meta verileri görüntünün tek tek çerçevesinin dışında işleyecek kadar esnektir.

Görüntü Meta Verilerini Okuma

WIC API'leri, uygulamaların görüntü meta verilerini okumasını ve yazmasını kolaylaştıran COM bileşenleri sağlar.

Meta verileri okumanın birincil yolu, belirli meta veri öğelerine erişmek için meta veri sorgu okuyucusu (IWICMetadataQueryReader) kullanmaktır. Meta veri sorgu okuyucu bileşeni codec tarafından desteklenir ve kod çözücü seviyesinde veya daha yaygın olan yöntemle, yani tek tek görüntü çerçeveleri üzerinden erişilebilir. Aşağıdaki kod, sorgu okuyucunun GetMetadataQueryReader yöntemini kullanarak tek bir çerçeve için sorgu okuyucuya nasıl erişeceklerini gösterir.

// Get the query reader
if (SUCCEEDED(hr))
{
    hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}

Sorgu okuyucu, belirli meta veriler hakkında bilgi almak için yöntemler ve alınacak meta veri öğesini belirtmek için bir araç sağlar. Aşağıdaki kod, App1 iç içe görüntü dosyası dizini (IFD) bloğu içinde belirli bir meta veri öğesi istemek için bir sorgu ifadesi kullanır. Bu, sorgu okuyucusunun GetMetadataByName yöntemi kullanılarak yapılır. Aşağıdaki kod, MicrosoftPhoto derecelendirme değerini almak için sorgu okuyucunun kullanılmasını gösterir.

PROPVARIANT value;
PropVariantInit(&value);

LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";

if (SUCCEEDED(hr))
{
    hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}

Yukarıdaki örnekteki pwzRatingQuery değişkeni, MicrosoftPhoto derecelendirmesi meta veri öğesine erişmek için sorgu dizesidir. Bu dize meta veri sorgu dili kullanılarak oluşturulur. Bu dizeyi oluşturmak için, tek tek meta veri öğelerini almak için meta veri biçimi ve meta veri sorgu dili bilgisi gerekir. Meta veri sorgu dili hakkında daha fazla bilgi için bkz. Meta Veri Sorgu Diline Genel Bakış.

Arka planda sorgu okuyucu, sorgu ifadesi tarafından açıklanan meta verilere erişmek için meta veri okuyucuyu (IWICMetadataReader) kullanır. Sorgu okuyucu kullanmaya ek olarak, meta verileri okumak için doğrudan bir meta veri okuyucuya da erişebilirsiniz. Blok okuyucu (IWICMetadataBlockReader) arabirimini sorgulayarak kod çözücüden veya tek tek çerçevelerden meta veri okuyucu alabilirsiniz.

Görüntü Meta Verileri Yazma

Meta veri yazma işlemi, meta veri sorgu yazıcısının (IWICMetadataQueryWriter) kullanılması dışında okunma biçimine benzer. Sorgu yazıcı arabirimi görüntü kodlayıcı tarafından uygulanır ve sorgu okuyucuda olduğu gibi meta verilere hem kodlayıcıda hem de tek karelerde (görüntü biçimi desteğine bağlı olarak) erişilir.

Aşağıdaki kod, bir kodlayıcı çerçevesinden sorgu yazıcısının nasıl alındığını ve daha önce okunan derecelendirme değerinin nasıl kaldırılacağını gösterir.

// Get the frame's query writer
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}

if (SUCCEEDED(hr))
{
    hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}

Meta veri yazmanın bir diğer yolu da hızlı meta veri güncelleştirmeleri kullanmaktır. Hızlı meta veri kodlama, görüntü dosyasını yeniden kodlamak zorunda kalmadan görüntü meta verilerini yazmanın bir yoludur. Bu, meta veri biçiminin doldurulmuş bir bölgesine yeni meta veri bilgileri yazılarak yapılır. Hızlı meta veri kodlayıcı (IWICFastMetadataEncoder) görüntü kod çözücüsü temelinde bileşen fabrikasından alınır. Hızlı meta veri kodlayıcı daha sonra meta verileri yazmak üzere kullanılan bir sorgu yazıcı alır. Son olarak, hızlı kodlayıcı değişikliği uygular.

Aşağıdaki kod, hızlı meta veri kodlayıcının nasıl alınıp MicrosoftRating değerini yazmak için nasıl kullanılacağını gösterir.

if (SUCCEEDED(hr))
{
    IWICFastMetadataEncoder *pFME = NULL;
    IWICMetadataQueryWriter *pFMEQW = NULL;

    hr = pFactory->CreateFastMetadataEncoderFromFrameDecode(
        pFrameDecode,
        &pFME);

    if (SUCCEEDED(hr))
    {
        hr = pFME->GetMetadataQueryWriter(&pFMEQW);
    }

    if (SUCCEEDED(hr))
    {
        // Add additional metadata
        PROPVARIANT value;

        PropVariantInit(&value);

        value.vt = VT_UI4;
        value.uiVal = 99;
        hr = pFMEQW->SetMetadataByName(L"/app1/ifd/{ushort=18249}", &value);

        PropVariantClear(&value);
    }

    if (SUCCEEDED(hr))
    {
        hr = pFME->Commit();
    }
}

Tüm meta veri biçimleri hızlı meta verileri desteklemez. Yerel olarak desteklenen hangi biçimlerin hızlı meta veri kodlamayı desteklediğini görmek için, bu belgenin devamında yer alan desteklenen Desteklenen Meta Veri Biçimleri bölümündeki tabloya bakın.

Arka planda, sorgu yazıcısı sorgu ifadesi tarafından açıklanan meta verileri yazmak için bir meta veri yazıcı (IWICMetadataWriter) kullanır. Sorgu okuyucu kullanmaya ek olarak, meta verileri yazmak için doğrudan bir meta veri yazıcıya da erişebilirsiniz. Blok yazıcı (IWICMetadataBlockWriter) arabirimini sorgulayarak, kod çözücüden veya her bir çerçeveden bir meta veri yazıcı elde edebilirsiniz.

Meta Veri Genişletilebilirliği

Daha önce belirtildiği gibi WIC, yaygın meta veri biçimleri için meta verileri okumak ve yazmak için çeşitli meta veri işleyicileri sağlar. Ancak yerel olarak desteklenmeyen bazı meta veri biçimleri vardır. Bu nedenle WIC, meta veri desteğini diğer biçimlere genişletebilen ek meta veri işleyicileri oluşturmaya yönelik API'ler sağlar.

Diğer meta veri biçimlerini tam olarak desteklemek için iki tür işleyici geliştirilmelidir: meta verileri okumak için meta veri okuyucu ve meta veri yazmak için bir meta veri yazıcı. Bu iki işleyici genellikle belirli bir biçim için çiftler halinde uygulansa da, bu bir gereksinim değildir. Yalnızca okuma özelliğinin veya yalnızca yazma yeteneğinin gerekli olduğu bazı durumlar olabilir.

WIC API'lerini kullanarak meta veri genişletilebilirliği hakkında daha fazla bilgi için bkz. Meta Veri Genişletilebilirliğine Genel Bakış.

Desteklenen Meta Veri Biçimleri

WIC, çeşitli yaygın meta veri biçimleri için destek sağlar. Aşağıdaki tabloda desteklenen meta veri biçimleri, sürümleri, meta veri biçimini destekleyen görüntü biçimleri ve meta veri biçiminin hızlı meta veri kodlamasını destekleyip desteklemediği listelenmektedir. Hızlı meta veri kodlaması hakkında daha fazla bilgi için bu belgenin önceki Görüntü Meta Verileri Yazma bölümüne bakın.

Desteklenen meta veri biçimleri Meta veri belirtimi sürümü Görüntü biçimi desteği Hızlı meta veri kodlamayı destekler
Uygulama0 JFIF 1.02 JPEG Hayır
Uygulama1 JFIF 1.02 JPEG, TIFF Hayır
Uygulama13 Bilinmeyen JPEG, TIFF Hayır
IFD TIFF 6.0 JPEG, TIFF Evet
Etik Kurul Bilinmeyen JPEG, TIFF Hayır
Exif Exif 2.2 JPEG, TIFF Evet
XMP XMP 1.0 (Eylül 2005) JPEG, TIFF Evet
GPS Exif 2.2 JPEG, TIFF Evet
IPTC IPTC 4.0 JPEG, TIFF Evet
Metin PNG 1.2 PNG Hayır

 

Not

IPTC doldurmayı desteklemediğinden, IPTC yalnızca blokların boyutu büyürse FME'yi destekler.

 

Meta Veri Bileşeni Özeti

Aşağıdaki tabloda meta verileri destekleyen WIC arabirimleri ve bunların ilgili bileşenleri açıklanmaktadır. Bu bileşenler görüntünün meta verilerine erişim sağlar. Bu bileşenler hakkında daha fazla bilgi için bkz. Windows Imaging Bileşenine Genel Bakış.

Bileşen Açıklama
Bitmap Çözücü (IWICBitmapDecoder)
  • Bir görüntü akışını okur ve kullanılabilir bir bit eşlem kaynağı oluşturur. Etiketli Görüntü Dosya Biçimi (TIFF) veya Ortak Fotoğraf Uzmanları Grubu (JPEG) gibi bir kapsayıcı biçimiyle ilişkilendirilmiş.
  • Kod çözücünün veri akışındaki bir çerçeve içinde olmayan tüm meta veri bloklarını listelemek için IWICMetadataBlockReader arabirimi uygular.
  • Bir sorgu okuma aracı, bir çerçevenin içinde olmayan görüntüyle ilişkili meta verileri okumaya imkan tanır.
Bitmap Çerçeve Çözümleme (IWICBitmapFrameDecode)
  • Kod çözücü tarafından tutulan görüntü akışından tek tek karelere erişir.
  • Çerçevenin veri akışındaki tüm meta veri bloklarını listelemek için bir IWICMetadataBlockReader arabirimi uygular.
  • Sorgu ifadelerini kullanarak çerçeveyle ilişkili meta verileri okumak için bir sorgu okuyucuyu kullanıma sunar.
Bit Eşlem Kodlayıcı (IWICBitmapEncoder)
  • Resim akışına bitmap kaynağı yazar. TIFF veya JPEG gibi bir kapsayıcı biçimiyle ilişkilendirilmiş.
  • Kodlayıcının veri akışına yazacak meta veri bloklarının listesini oluşturmak için bir IWICMetadataBlockWriter arabirimi uygular.
  • Sorgu ifadelerini kullanarak görüntüyle ilişkili meta verileri yazmak için sorgu yazıcısını kullanıma sunar.
Bitma Çerçeve Kodlaması (IWICBitmapFrameEncode)
  • Kodlayıcının elinde tuttuğu akışa kodlanacak bir çerçeve oluşturur.
  • Çerçevenin veri akışına yazacak meta veri bloklarının listesini oluşturmak için bir IWICMetadataBlockWriter arabirimi uygular.
  • Sorgu ifadelerini kullanarak çerçeveyle ilişkili meta verileri yazmak için sorgu yazıcısını kullanıma sunar.

 

Aşağıdaki tabloda WIC meta veri bileşenleri açıklanmaktadır. Bu bileşenler, önceki tabloda listelenen bileşenler tarafından sunulan bir görüntüdeki meta verileri okumanızı ve yazmanızı sağlar.

Bileşen Açıklama
Meta Veri Sorgu Okuyucusu (IWICMetadataQueryReader)
  • Bir sorgu dizesi alır ve meta verileri almak için temel meta veri hiyerarşisinde gezinır.
Meta Veri Sorgu Yazıcısı (IWICMetadataQueryWriter)
  • Bir sorgu dizesi alır ve meta verileri almak, ayarlamak ve kaldırmak için temel meta veri hiyerarşisinde geziniyor.
Meta Veri Blok Okuyucusu (IWICMetadataBlockReader)
  • Meta veri hiyerarşisinin üst kısmındaki IWICMetadataReader nesnelerinin salt okunur bir koleksiyonunu yönetir ve tüm meta veri bloklarının numaralandırılmasını sağlar.
  • Bit eşlem kod çözücü ve kodu çözülmüş bit eşlem çerçevesi tarafından uygulanır.
  • Özel codec bileşenleri için üçüncü taraf bileşen geliştiricileri tarafından uygulanır.
Meta Veri Bloğu Yazıcısı (IWICMetadataBlockWriter)
  • Meta veri hiyerarşisinin en üstündeki IWICMetadataWriter nesnelerinin okuma ve yazma koleksiyonunu yönetir.
  • Bitmap kodlayıcı ve bitmap çerçeve kodlayıcı tarafından uygulanır.
  • Özel codec bileşenleri için üçüncü taraf bileşen geliştiricileri tarafından uygulanır.
Meta Veri Okuyucusu (IWICMetadataReader)
  • Bir meta veri akışını ayrıştırarak meta veri öğelerinin salt okunur koleksiyonunu yönetir. EXIF, IFD ve XMP gibi bir meta veri biçimiyle ilişkilendirilir.
  • Bir biçim ve kimlik çifti verildiğinde değer döndüren bir sözlük işlevi görür.
  • Özel meta veri türleri için üçüncü taraf bileşen geliştiricileri tarafından uygulanır.
Meta Veri Yazıcı (IWICMetadataWriter)
  • Bir meta veri akışını ayrıştırıp serileştirir ve meta veri öğelerinin okuma/yazma koleksiyonunu yönetir.
  • Özel meta veri türleri için üçüncü taraf bileşen geliştiricileri tarafından uygulanır.
Hızlı Meta Veri KodlayıcıIWICFastMetadataEncoder
  • Görüntüyü yeniden kodlamadan meta verileri yerinde güncelleştirecek bir meta veri hiyerarşisinde yazmak için semantiği kullanıma sunar.

 

kavramsal

Windows Görüntüleme Bileşenine Genel Bakış

Meta Veri Sorgu Diline Genel Bakış

Okuma ve Yazma Görüntü Meta Verilerine Genel Bakış

Meta Veri Genişletilebilirliğine Genel Bakış

Nasıl Yapılır: Meta Veri ile JPEG Görüntüsünü Yeniden Kodlama