Görüntülemeye Genel Bakış

bu konu, Microsoft Windows Presentation Foundation ımaging bileşenine bir giriş sağlar. WPF Imaging, geliştiricilerin resimleri görüntülemesine, dönüştürmelerine ve biçimlendirmeye olanak sağlar.

WPF Imaging bileşeni

WPF Imaging, Microsoft Windows içindeki görüntüleme özelliklerine önemli geliştirmeler sağlar. bir bit eşlem görüntüleme veya ortak denetimde görüntü kullanma gibi görüntüleme özellikleri, daha önce microsoft Windows Grafik Cihaz Arabirimi (gdı) veya microsoft Windows GDI+ kitaplıklarına bağımlıdır. Bu API, taban çizgisi görüntüleme işlevselliği sağlar, ancak codec genişletilebilirliği ve yüksek uygunlukta görüntü desteği gibi özelliklerin bulunmaması. WPF ımaging, gdı ve GDI+ 'nin eksikllarını aşmak için tasarlanmıştır ve uygulamalarınızın içindeki görüntüleri görüntülemesi ve kullanmak için yeni bir apı kümesi sağlar.

Yönetilen bir bileşeni ve yönetilmeyen bileşeni WPF Görüntüleme API 'sine erişmenin iki yolu vardır. Yönetilmeyen bileşen aşağıdaki özellikleri sağlar.

  • Yeni veya özel görüntü biçimleri için genişletilebilirlik modeli.

  • bit eşlem (BMP), Joint photografik uzmanları grubu (JPEG), taşınabilir ağ grafikleri (PNG), etiketli resim dosyası biçimi (tıff), Microsoft Windows medya fotoğrafı, grafik değişim biçimi (gıf) ve simge (. ico) dahil yerel görüntü biçimlerinde gelişmiş performans ve güvenlik.

  • Kanal başına 8 bite kadar yüksek bit derinlikli görüntü verilerinin korunması (piksel başına 32 bit).

  • Geri dönüşlü görüntü ölçekleme, kırpma ve döndürme.

  • Basitleştirilmiş renk yönetimi.

  • Dosya içi, özel meta veriler için destek.

  • Yönetilen bileşen, Kullanıcı arabirimi (UI), animasyon ve grafik gibi diğer WPF özellikleriyle görüntülerin sorunsuz bir şekilde tümleştirilmesini sağlamak için yönetilmeyen altyapıyı kullanır. yönetilen bileşen, wpf uygulamalarında yeni görüntü biçimlerinin otomatik olarak tanınmasını sağlayan Windows Presentation Foundation (WPF) görüntüleme codec genişletilebilirliği modelinden de faydalanır.

Yönetilen WPF Görüntüleme API 'sinin çoğunluğu ad alanında bulunur System.Windows.Media.Imaging , ancak gibi çeşitli önemli türler, ve ad alanında ImageBrushImageDrawing bulunur ve ad alanında yer System.Windows.MediaImage alır System.Windows.Controls .

Bu konu, yönetilen bileşen hakkında ek bilgiler sağlar. Yönetilmeyen API hakkında daha fazla bilgi için YÖNETILMEYEN WPF Imaging bileşeni belgelerine bakın.

WPF resim biçimleri

Bir codec bileşeni, belirli bir medya biçiminin kodunu çözmek veya kodlamak için kullanılır. WPF ımaging, BMP, JPEG, PNG, tıff, Windows medya fotoğrafı, gıf ve simge görüntü biçimleri için bir codec bileşeni içerir. Bu codec bileşenlerinden her biri, uygulamaların kodunu çözmelerini ve SIMGE dışında kendi görüntü biçimlerini kodlamalarını sağlar.

BitmapSource , görüntülerin kod çözmede ve kodlamasında kullanılan önemli bir sınıftır. WPF görüntüleme işlem hattının temel yapı taşıdır ve belirli bir boyut ve çözünürlükte tek bir sabit piksel kümesini temsil eder. BitmapSource, Birden çok çerçeve görüntüsünün tek bir çerçevesi olabilir veya bir üzerinde gerçekleştirilen dönüşümün sonucu olabilir BitmapSource . WPF Imaging içinde, gibi kullanılan birçok birincil sınıfların üst öğesidir BitmapFrame .

Bir BitmapFrame görüntü biçiminin gerçek bit eşlem verilerini depolamak için kullanılır. Birçok görüntü biçimi yalnızca tek destekler BitmapFrame , ancak GIF ve TIFF gibi biçimler görüntü başına birden çok çerçeveyi destekler. Çerçeveler, kod çözücüleri tarafından giriş verisi olarak kullanılır ve görüntü dosyaları oluşturmak için kodlayıcılara geçirilir.

Aşağıdaki örnek, bir BitmapFrame ' dan oluşturulup BIR BitmapSource TIFF görüntüsüne nasıl eklendiğini gösterir.

BitmapSource image5 = BitmapSource.Create(
    width,
    height,
    96,
    96,
    PixelFormats.Indexed1,
    BitmapPalettes.WebPalette,
    pixels,
    stride);

FileStream stream5 = new FileStream("palette.tif", FileMode.Create);
TiffBitmapEncoder encoder5 = new TiffBitmapEncoder();
encoder5.Frames.Add(BitmapFrame.Create(image5));
encoder5.Save(stream5);
Dim image5 As BitmapSource = System.Windows.Media.Imaging.BitmapSource.Create(width, height, 96, 96, PixelFormats.Indexed1, BitmapPalettes.WebPalette, pixels, stride)

Dim stream5 As New FileStream("palette.tif", FileMode.Create)
Dim encoder5 As New TiffBitmapEncoder()
encoder5.Frames.Add(BitmapFrame.Create(image5))
encoder5.Save(stream5)

Görüntü biçimi kod çözme

Görüntü kod çözme, bir görüntü biçiminin sistem tarafından kullanılabilecek verileri görüntüye dönüştürmesidir. Görüntü verileri daha sonra farklı bir biçimde görüntüleme, işleme veya kodlama için kullanılabilir. Kod çözücü seçimi resim biçimini temel alır. Belirli bir kod çözücü belirtilmedikçe, codec bileşeni seçimi otomatiktir. WPF resimlerini görüntüleme bölümünde örnekleri otomatik kod çözme gösterilmektedir. Yönetilmeyen WPF görüntüleme arabirimleri kullanılarak geliştirilen ve sisteme kaydedilen özel biçim kod çözücüleri, kod çözücü seçimine otomatik olarak katılır. Bu, WPF uygulamalarında özel biçimlerin otomatik olarak görüntülenmesine izin verir.

Aşağıdaki örnek, bir BMP biçimli görüntünün kodunu çözmek için bir bit eşlem kod çözücünün kullanımını gösterir.


// Open a Uri and decode a BMP image
System::Uri^ myUri = gcnew System::Uri("tulipfarm.bmp", UriKind::RelativeOrAbsolute);
BmpBitmapDecoder^ decoder2 = gcnew BmpBitmapDecoder(myUri, BitmapCreateOptions::PreservePixelFormat, BitmapCacheOption::Default);
BitmapSource^ bitmapSource2 = decoder2->Frames[0];

// Draw the Image
Image^ myImage2 = gcnew Image();
myImage2->Source = bitmapSource2;
myImage2->Stretch = Stretch::None;
myImage2->Margin = System::Windows::Thickness(20);

// Open a Uri and decode a BMP image
Uri myUri = new Uri("tulipfarm.bmp", UriKind.RelativeOrAbsolute);
BmpBitmapDecoder decoder2 = new BmpBitmapDecoder(myUri, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
BitmapSource bitmapSource2 = decoder2.Frames[0];

// Draw the Image
Image myImage2 = new Image();
myImage2.Source = bitmapSource2;
myImage2.Stretch = Stretch.None;
myImage2.Margin = new Thickness(20);
' Open a Uri and decode a BMP image
Dim myUri As New Uri("tulipfarm.bmp", UriKind.RelativeOrAbsolute)
Dim decoder2 As New BmpBitmapDecoder(myUri, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default)
Dim bitmapSource2 As BitmapSource = decoder2.Frames(0)

' Draw the Image
Dim myImage2 As New Image()
myImage2.Source = bitmapSource2
myImage2.Stretch = Stretch.None
myImage2.Margin = New Thickness(20)

Görüntü biçimi kodlaması

Görüntü kodlama, görüntü verilerinin belirli bir görüntü biçimine çevirmesidir. Daha sonra kodlanmış görüntü verileri yeni resim dosyaları oluşturmak için kullanılabilir. WPF Imaging, yukarıda açıklanan her bir görüntü biçimi için kodlayıcılar sağlar.

Aşağıdaki örnek, yeni oluşturulan bir bit eşlem görüntüsünü kaydetmek için bir kodlayıcı kullanımını gösterir.

FileStream^ stream = gcnew FileStream("new.bmp", FileMode::Create);
BmpBitmapEncoder^ encoder = gcnew BmpBitmapEncoder();
TextBlock^ myTextBlock = gcnew TextBlock();
myTextBlock->Text = "Codec Author is: " + encoder->CodecInfo->Author->ToString();
encoder->Frames->Add(BitmapFrame::Create(image));
encoder->Save(stream);
FileStream stream = new FileStream("new.bmp", FileMode.Create);
BmpBitmapEncoder encoder = new BmpBitmapEncoder();
TextBlock myTextBlock = new TextBlock();
myTextBlock.Text = "Codec Author is: " + encoder.CodecInfo.Author.ToString();
encoder.Frames.Add(BitmapFrame.Create(image));
encoder.Save(stream);
Dim stream As New FileStream("new.bmp", FileMode.Create)
Dim encoder As New BmpBitmapEncoder()
Dim myTextBlock As New TextBlock()
myTextBlock.Text = "Codec Author is: " + encoder.CodecInfo.Author.ToString()
encoder.Frames.Add(BitmapFrame.Create(image))
encoder.Save(stream)

WPF 'de görüntü görüntüleme

bir Windows Presentation Foundation (WPF) uygulamasında görüntü görüntülemenin birkaç yolu vardır. Görüntüler, bir denetim kullanılarak görüntülenebilir Image , bir görsel üzerinde boyanmış ImageBrush veya kullanılarak çizilir ImageDrawing .

Görüntü denetimini kullanma

Image , bir çerçeve öğesidir ve uygulamalarda görüntüleri görüntülemenin birincil yoludur. XAML 'de, Image iki şekilde kullanılabilir; öznitelik sözdizimi veya özellik sözdizimi. Aşağıdaki örnek, hem öznitelik sözdizimini hem de özellik etiketi sözdizimini kullanarak bir görüntünün 200 piksel genişliğinde nasıl işleneceğini gösterir. Öznitelik sözdizimi ve özellik sözdizimi hakkında daha fazla bilgi için bkz. bağımlılık özelliklerine genel bakış.

<!-- Simple image rendering. However, rendering an image this way may not
     result in the best use of application memory. See markup below which
     creates the same end result but using less memory. -->
<Image Width="200" 
Source="C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water Lilies.jpg"/>

<Image Width="200">
  <Image.Source>
    <!-- To save significant application memory, set the DecodePixelWidth or  
     DecodePixelHeight of the BitmapImage value of the image source to the desired 
     height and width of the rendered image. If you don't do this, the application will 
     cache the image as though it were rendered as its normal size rather then just 
     the size that is displayed. -->
    <!-- Note: In order to preserve aspect ratio, only set either DecodePixelWidth
         or DecodePixelHeight but not both. -->
    <BitmapImage DecodePixelWidth="200"  
     UriSource="C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water Lilies.jpg" />
  </Image.Source>
</Image>

Örneklerin birçoğu bir BitmapImage görüntü dosyasına başvurmak için bir nesnesi kullanır. BitmapImage , BitmapSource Extensible Application Markup Language (XAML) için en iyi duruma getirilmiş bir özelleştirilmiştir ve görüntüleri bir denetim olarak görüntülemenin kolay bir yoludur SourceImage .

Aşağıdaki örnek, kod kullanarak bir görüntünün 200 piksel genelinde nasıl işleneceğini gösterir.

Not

BitmapImageISupportInitializebirden çok özelliklerde başlatmayı iyileştirmek için arabirimini uygular. Özellik değişiklikleri yalnızca nesne başlatılırken oluşabilir. BeginInitBaşlatmanın başladığını belirten ve EndInit başlatmanın tamamlandığını belirten sinyal çağrısı. Başlatıldıktan sonra özellik değişiklikleri yok sayılır.

// Create Image Element
Image myImage = new Image();
myImage.Width = 200;

// Create source
BitmapImage myBitmapImage = new BitmapImage();

// BitmapImage.UriSource must be in a BeginInit/EndInit block
myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri(@"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water Lilies.jpg");

// To save significant application memory, set the DecodePixelWidth or
// DecodePixelHeight of the BitmapImage value of the image source to the desired
// height or width of the rendered image. If you don't do this, the application will
// cache the image as though it were rendered as its normal size rather then just
// the size that is displayed.
// Note: In order to preserve aspect ratio, set DecodePixelWidth
// or DecodePixelHeight but not both.
myBitmapImage.DecodePixelWidth = 200;
myBitmapImage.EndInit();
//set image source
myImage.Source = myBitmapImage;
' Create Image Element
Dim myImage As New Image()
myImage.Width = 200

' Create source
Dim myBitmapImage As New BitmapImage()

' BitmapImage.UriSource must be in a BeginInit/EndInit block
myBitmapImage.BeginInit()
myBitmapImage.UriSource = New Uri("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water Lilies.jpg")

' To save significant application memory, set the DecodePixelWidth or  
' DecodePixelHeight of the BitmapImage value of the image source to the desired 
' height or width of the rendered image. If you don't do this, the application will 
' cache the image as though it were rendered as its normal size rather then just 
' the size that is displayed.
' Note: In order to preserve aspect ratio, set DecodePixelWidth
' or DecodePixelHeight but not both.
myBitmapImage.DecodePixelWidth = 200
myBitmapImage.EndInit()
'set image source
myImage.Source = myBitmapImage

Görüntüleri döndürme, dönüştürme ve kırpma

WPF kullanıcıların, BitmapImage veya gibi ek nesneleri kullanarak veya özelliklerini kullanarak görüntüleri dönüştürmesine olanak sağlar BitmapSourceCroppedBitmapFormatConvertedBitmap . Bu görüntü dönüştürmeleri bir görüntüyü ölçeklendirebilir veya döndürebilir, bir görüntünün piksel biçimini değiştirebilir veya bir görüntüyü kırpabilir.

Resim döndürmeler, özelliği kullanılarak gerçekleştirilir RotationBitmapImage . Döndürmeler yalnızca 90 derece artışlarla yapılabilir. Aşağıdaki örnekte, bir görüntü 90 derece döndürülür.

<Image Width="150" Margin="5" Grid.Column="0" Grid.Row="1">
  <Image.Source>
    <TransformedBitmap Source="/sampleImages/watermelon.jpg" >
      <TransformedBitmap.Transform>
        <RotateTransform Angle="90"/>
      </TransformedBitmap.Transform>
    </TransformedBitmap>
  </Image.Source>
</Image>
// Create Image element.
Image rotated90 = new Image();
rotated90.Width = 150;

// Create the TransformedBitmap to use as the Image source.
TransformedBitmap tb = new TransformedBitmap();

// Create the source to use as the tb source.
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(@"sampleImages/watermelon.jpg", UriKind.RelativeOrAbsolute);
bi.EndInit();

// Properties must be set between BeginInit and EndInit calls.
tb.BeginInit();
tb.Source = bi;
// Set image rotation.
RotateTransform transform = new RotateTransform(90);
tb.Transform = transform;
tb.EndInit();
// Set the Image source.
rotated90.Source = tb;
' Create Image element.
Dim rotated90 As New Image()
rotated90.Width = 150

' Create the TransformedBitmap to use as the Image source.
Dim tb As New TransformedBitmap()

' Create the source to use as the tb source.
Dim bi As New BitmapImage()
bi.BeginInit()
bi.UriSource = New Uri("sampleImages/watermelon.jpg", UriKind.RelativeOrAbsolute)
bi.EndInit()

' Properties must be set between BeginInit and EndInit calls.
tb.BeginInit()
tb.Source = bi
' Set image rotation.
Dim transform As New RotateTransform(90)
tb.Transform = transform
tb.EndInit()
' Set the Image source.
rotated90.Source = tb

Bir görüntüyü gri tonlamalı gibi farklı bir piksel biçimine dönüştürmek kullanılarak yapılır FormatConvertedBitmap . Aşağıdaki örneklerde bir görüntü öğesine dönüştürülür Gray4 .

<!-- Grayscale XAML Image -->
<Image Width="200" Grid.Column="0" Grid.Row="1">
   <Image.Source>
      <FormatConvertedBitmap Source="/sampleImages/rocks.jpg"  DestinationFormat="Gray4" />
   </Image.Source>
</Image>
//Create Image Element
Image grayImage = new Image();
grayImage.Width = 200;
grayImage.Margin = new Thickness(5);

//Create source using xaml defined resource.
FormatConvertedBitmap fcb = new FormatConvertedBitmap(
   (BitmapImage)this.Resources["masterImage"],PixelFormats.Gray4,null,0);
//set image source
grayImage.Source = fcb;
'Create Image Element
Dim grayImage As New Image()
grayImage.Width = 200
grayImage.Margin = New Thickness(5)

'Create source using xaml defined resource.
Dim fcb As New FormatConvertedBitmap(CType(Me.Resources("masterImage"), BitmapImage), PixelFormats.Gray4, Nothing, 0)
'set image source
grayImage.Source = fcb

Bir görüntüyü kırpmak için Clip ya da özelliği ImageCroppedBitmap kullanılabilir. Genellikle, yalnızca bir görüntünün bir kısmını göstermek istiyorsanız Clip kullanılmalıdır. Kırpılmış bir görüntüyü kodlamak ve kaydetmeniz gerekiyorsa, CroppedBitmap kullanılmalıdır. Aşağıdaki örnekte, bir resim kullanılarak Clip özelliği kullanılarak kırpılacak EllipseGeometry .

<!-- Cropping an Image using Clip -->
<Image Width="200" Grid.Column="0" Grid.Row="5" Margin="5"
   Source="/sampleImages/gecko.jpg">
  <Image.Clip>
    <EllipseGeometry Center="75,50" RadiusX="50" RadiusY="25" />
  </Image.Clip>
</Image>
//Create the image for clipping
Image clipImage = new Image();
clipImage.Width = 200;
clipImage.Margin = new Thickness(5);

//Create & Set source
BitmapImage bi = new BitmapImage();
//BitmapImage.UriSource must be in a BeginInit/EndInit block
bi.BeginInit();
bi.UriSource = new Uri("pack://application:,,/sampleImages/gecko.jpg");
bi.EndInit();
clipImage.Source = bi;

//Clip the using an EllipseGeometry
EllipseGeometry clipGeometry = new EllipseGeometry(new Point(75, 50), 50, 25);
clipImage.Clip = clipGeometry;
' Create the image for clipping
Dim clipImage As New Image()
clipImage.Width = 200
clipImage.Margin = New Thickness(5)

'Create & Set source
Dim bi As New BitmapImage()
' BitmapImage properties must be in a BeginInit/EndInit block
bi.BeginInit()
bi.UriSource = New Uri("pack://application:,,/sampleImages/gecko.jpg")
bi.EndInit()
clipImage.Source = bi

' Clip the using an EllipseGeometry
Dim clipGeometry As New EllipseGeometry(New System.Windows.Point(75, 50), 50, 25)
clipImage.Clip = clipGeometry

Görüntüleri uzatma

StretchÖzelliği, bir görüntünün kapsayıcısını doldurmak için nasıl uzatılacağını denetler. StretchÖzelliği, sabit listesi tarafından tanımlanan aşağıdaki değerleri kabul eder Stretch :

  • None: Görüntü, çıkış alanını doldurmak için uzatılmamıştır. Görüntü çıkış alanından büyükse, görüntü çıkış alanına çizilir ve sığmayan öğeleri kırpmaz.

  • Fill: Görüntü çıktı alanına uyacak şekilde ölçeklendirilir. Görüntü yüksekliği ve genişliği bağımsız olarak ölçeklendirildikleri için görüntünün orijinal en boy oranı korunmayabilir. Diğer bir deyişle, çıkış kapsayıcısını tamamen doldurması için görüntü çarpıtılmış olabilir.

  • Uniform: Görüntü, çıkış alanı içinde tamamen sığacak şekilde ölçeklendirilir. Görüntünün en boy oranı korunur.

  • UniformToFill: Görüntü, görüntünün özgün en boy oranını korurken çıkış alanını tamamen dolduracak şekilde ölçeklendirilir.

Aşağıdaki örnek, kullanılabilir Numaralandırmaların her birini Stretch bir öğesine uygular Image .

Aşağıdaki görüntüde, örnekteki çıkış gösterilmektedir ve farklı Stretch ayarların bir görüntüye uygulandığında etkisi gösterilmektedir.

Different TileBrush Stretch settings
Farklı Esnetme ayarları

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
  <DockPanel>

    <Border DockPanel.Dock="Top" Background="Black">
      <TextBlock Foreground="White" HorizontalAlignment="Stretch" FontSize="20">
        Stretching an Image
      </TextBlock>
    </Border>

    <Grid Name="simpleGrid" Background="{StaticResource CheckeredBrushResource}" 
       Margin="10" 
       ShowGridLines="True"
       VerticalAlignment="Center"
       HorizontalAlignment="Center">
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="175" />
        <ColumnDefinition Width="175" />
        <ColumnDefinition Width="175" />
        <ColumnDefinition Width="175" />
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="200"/>
      </Grid.RowDefinitions>
      <!-- Labels -->
      <TextBlock Style="{StaticResource Header1}" 
        Grid.Column="0" Grid.Row="0">None</TextBlock>
      <TextBlock Style="{StaticResource Header1}" 
        Grid.Column="1" Grid.Row="0">Uniform</TextBlock>
      <TextBlock Style="{StaticResource Header1}" 
        Grid.Column="2" Grid.Row="0">UniformToFill</TextBlock>
      <TextBlock Style="{StaticResource Header1}"
        Grid.Column="3" Grid.Row="0">Fill</TextBlock>
      <Border Grid.Column="0" Grid.Row="1" BorderThickness="1" BorderBrush="Black">
        <!-- None: Image is not scaled. If image is larger than the
             output area, the image will be cropped to the size of the output area.-->
        <Image
          Source="sampleImages/gecko.jpg" 
          Stretch="None" />
      </Border>
      <Border Grid.Column="1" Grid.Row="1" BorderThickness="1" BorderBrush="Black">
        <!-- Uniform: Scale to fit output area.
             Aspect ratio is preserved.-->
        <Image
          Source="sampleImages/gecko.jpg" 
          Stretch="Uniform" />
      </Border>
      <Border Grid.Column="2" Grid.Row="1" BorderThickness="1" BorderBrush="Black">
        <!-- UniformToFill: Scale to completely fill output area.
             Aspect ratio is preserved. Cropping may occur.-->
        <Image  
          Source="sampleImages/gecko.jpg" 
        Stretch="UniformToFill" />
      </Border>
      <Border Grid.Column="3" Grid.Row="1" BorderThickness="1" BorderBrush="Black">
      <!-- Fill: Scale to completely fill output area.
             Aspect ratio may not be preserved.-->
      <Image 
        Source="sampleImages/gecko.jpg" 
        Stretch="Fill" />
      </Border>
    </Grid>
  </DockPanel>
</Page>

Resimlerle boyama

Görüntüler, ile boyayarak bir uygulamada da görüntülenebilir Brush . Fırçalar basit, düz renklerden karmaşık desen ve resim kümelerine Kullanıcı arabirimi nesneleri boyamanıza imkan tanır. Resimlerle boyamak için bir kullanın ImageBrush . , ImageBrushTileBrush İçeriğini bir bit eşlem resmi olarak tanımlayan bir türüdür. ImageBrush, Özelliği tarafından belirtilen tek bir görüntüyü görüntüler ImageSource . Resmin nasıl uzatılacağını, hizalandığını ve döşeli olduğunu denetleyebilir, bu da deformasyonu ve diğer etkileri üretir. Aşağıdaki çizimde, ile elde edilebilir bazı etkiler gösterilmektedir ImageBrush .

ImageBrush output examples
Görüntü fırçaları şekilleri, denetimleri, metinleri ve daha fazlasını doldurabilir

Aşağıdaki örnek, bir düğmenin arka planının, kullanarak bir görüntüyle nasıl boyanacağını gösterir ImageBrush .

<!-- Sets the button's Background property with an ImageBrush. The resulting
     button has an image as its background. -->
<Button Grid.Row="3" Grid.Column="2" 
 Height="75" Width="100" Foreground="White" FontWeight="Bold"
 HorizontalAlignment="Left">
  A Button
  <Button.Background>
    <ImageBrush ImageSource="sampleImages\blueberries.jpg" />
  </Button.Background>
</Button>

Görüntüler hakkında daha fazla ImageBrush bilgi için bkz. ImageBrush

Görüntü Meta Verileri

Bazı görüntü dosyaları, dosyanın içeriğini veya özelliklerini açıklayan meta veriler içerir. Örneğin dijital kameraların çoğu, görüntüyü yakalamak için kullanılan kameranın modeli ve modeliyle ilgili meta veriler içeren görüntüler oluşturabilir. Her görüntü biçimi meta verileri farklı şekilde işlemeye devam eder ancak WPF Görüntüleme, desteklenen her görüntü biçimi için meta verileri depolamak ve almak için tek tip bir yol sağlar.

Meta verilere erişim, bir nesnenin Metadata özelliği aracılığıyla BitmapSource sağlanır. Metadata , BitmapMetadata görüntünün içerdiği tüm meta verileri içeren bir nesne döndürür. Bu veriler bir meta veri şemasında veya farklı şemaların birleşiminde olabilir. WPF Imaging şu görüntü meta veri şemalarını destekler: Değiştirilebilir görüntü dosyası (Exif), tEXt (PNG Metin Verileri), görüntü dosyası dizini (IFD), Uluslararası Basın Telekomünikasyon Kurulu (IPTC) ve Genişletilebilir Meta Veri Platformu (XMP).

Meta verileri okuma işlemini basitleştirmek için, , ve gibi kolayca BitmapMetadata erişilebilen birkaç adlandırılmış Author özellik TitleCameraModel sağlar. Bu adlandırılmış özelliklerin çoğu meta verileri yazmak için de kullanılabilir. Meta verileri okumak için ek destek, meta veri sorgu okuyucusu tarafından sağlanır. yöntemi, GetQueryGetQuerygibi bir dize sorgusu sağlayarak meta veri sorgu okuyucusunu almak için kullanılır. Aşağıdaki örnekte, GetQueryGetQuery konumda depolanan metni almak için kullanılır.


// Add the metadata of the bitmap image to the text block.
TextBlock^ myTextBlock = gcnew TextBlock();
myTextBlock->Text = "The Description metadata of this image is: " + pngInplace->GetQuery("/Text/Description")->ToString();

// Add the metadata of the bitmap image to the text block.
TextBlock myTextBlock = new TextBlock();
myTextBlock.Text = "The Description metadata of this image is: " + pngInplace.GetQuery("/Text/Description").ToString();
' Add the metadata of the bitmap image to the text block.
Dim myTextBlock As New TextBlock()
myTextBlock.Text = "The Description metadata of this image is: " + pngInplace.GetQuery("/Text/Description").ToString()

Meta verileri yazmak için bir meta veri sorgu yazıcısı kullanılır. SetQuery sorgu yazıcıyı elde edin ve istenen değeri ayarlar. Aşağıdaki örnekte, SetQuerySetQuery konumda depolanan metni yazmak için kullanılır.

Stream^ pngStream = gcnew FileStream("smiley.png", FileMode::Open, FileAccess::ReadWrite, FileShare::ReadWrite);
PngBitmapDecoder^ pngDecoder = gcnew PngBitmapDecoder(pngStream, BitmapCreateOptions::PreservePixelFormat, BitmapCacheOption::Default);
BitmapFrame^ pngFrame = pngDecoder->Frames[0];
InPlaceBitmapMetadataWriter^ pngInplace = pngFrame->CreateInPlaceBitmapMetadataWriter();
if (pngInplace->TrySave() == true)
{
   pngInplace->SetQuery("/Text/Description", "Have a nice day.");
}
pngStream->Close();
Stream pngStream = new System.IO.FileStream("smiley.png", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
PngBitmapDecoder pngDecoder = new PngBitmapDecoder(pngStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
BitmapFrame pngFrame = pngDecoder.Frames[0];
InPlaceBitmapMetadataWriter pngInplace = pngFrame.CreateInPlaceBitmapMetadataWriter();
if (pngInplace.TrySave() == true)
{ pngInplace.SetQuery("/Text/Description", "Have a nice day."); }
pngStream.Close();
Dim pngStream As New System.IO.FileStream("smiley.png", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)
Dim pngDecoder As New PngBitmapDecoder(pngStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default)
Dim pngFrame As BitmapFrame = pngDecoder.Frames(0)
Dim pngInplace As InPlaceBitmapMetadataWriter = pngFrame.CreateInPlaceBitmapMetadataWriter()
If pngInplace.TrySave() = True Then
    pngInplace.SetQuery("/Text/Description", "Have a nice day.")
End If
pngStream.Close()

Codec Genişletilebilirliği

WPF Imaging'in temel bir özelliği, yeni görüntü codec bileşenleri için genişletilebilirlik modelidir. Bu yönetimsiz arabirimler, codec geliştiricilerinin WPF uygulamaları tarafından otomatik olarak yeni görüntü biçimlerinin kullanılab codec'leri WPF ile tümleştirerek bunları etkinleştirmesini sağlar.

Genişletilebilirlik API'si örneği için bkz. Win32 Örnek Codec Bileşeni. Bu örnek, özel görüntü biçimi için kod çözücü ve kodlayıcı oluşturmayı gösterir.

Not

Sistemin tanıması için codec'in dijital olarak imzalanmış olması gerekir.

Ayrıca bkz.