Görüntülemeye Genel Bakış

Bu konu başlığında, Microsoft Windows Presentation Foundation Imaging Bileşeni'ne giriş bilgileri sağlanmaktadır. WPF Imaging, geliştiricilerin görüntüleri görüntülemesine, dönüştürmesine ve biçimlendirmesine olanak tanır.

WPF Görüntüleme Bileşeni

WPF Imaging, Microsoft Windows içindeki görüntüleme özelliklerinde önemli geliştirmeler sağlar. 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 (GDI) veya Microsoft Windows GDI+ kitaplıklarına dayanıyordu. Bu API temel görüntüleme işlevselliği sağlar, ancak codec genişletilebilirliği desteği ve yüksek aslına uygunluk görüntü desteği gibi özelliklere sahip değil. WPF Görüntüleme, GDI ve GDI+ eksikliklerinin üstesinden gelmek ve uygulamalarınızdaki görüntüleri görüntülemek ve kullanmak için yeni bir API kümesi sağlamak için tasarlanmıştır.

WPF Görüntüleme API'sine, yönetilen bir bileşene ve yönetilmeyen bir bileşene 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), Ortak Fotoğraf Uzmanları Grubu (JPEG), Taşınabilir Ağ Grafikleri (PNG), Etiketli Görüntü Dosya Biçimi (TIFF), Microsoft Windows Media Fotoğraf, Grafik Değişim Biçimi (GIF) ve simge (.ico) gibi yerel görüntü biçimlerinde performans ve güvenlik iyileştirildi.

  • Kanal başına en fazla 8 bit (piksel başına 32 bit) yüksek bit derinliğinde görüntü verilerinin korunması.

  • Yıkıcı olmayan görüntü ölçeklendirme, kırpma ve döndürme.

  • Basitleştirilmiş renk yönetimi.

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

  • Yönetilen bileşen, görüntülerin kullanıcı arabirimi (UI), animasyon ve grafikler gibi diğer WPF özellikleriyle sorunsuz 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'i genişletilebilirlik modelinden de yararlanır.

Yönetilen WPF Görüntüleme API'sinin çoğu ad alanında System.Windows.Media.Imaging bulunur, ancak ve gibi ImageDrawingImageBrush birçok önemli tür ad alanında System.Windows.Media bulunur ve Image ad alanında System.Windows.Controls bulunur.

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 Görüntüleme Bileşeni belgelerine bakın.

WPF Resim Biçimleri

Codec, belirli bir medya biçiminin kodunu çözmek veya kodlamak için kullanılır. WPF Imaging, BMP, JPEG, PNG, TIFF, Windows Media Photo, GIF ve ICON resim biçimleri için bir codec içerir. Bu codec'lerin her biri uygulamaların kodunu çözmesine ve ICON dışında ilgili görüntü biçimlerini kodlamasına olanak tanır.

BitmapSource , görüntülerin kod çözme 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, sabit bir piksel kümesini temsil eder. , BitmapSource birden çok çerçeve görüntüsünün tek bir çerçevesi olabileceği gibi, üzerinde BitmapSourcegerçekleştirilen bir dönüşümün sonucu da olabilir. GIBI BitmapFrameWPF görüntülemede kullanılan birçok birincil sınıfın üst öğesidir.

bir BitmapFrame görüntü biçiminin gerçek bit eşlem verilerini depolamak için kullanılır. Gif ve TIFF gibi biçimler görüntü başına birden çok kareyi desteklese de, birçok görüntü biçimi yalnızca tek BitmapFramebir biçimi destekler. Çerçeveler kod çözücüler tarafından giriş verileri olarak kullanılır ve görüntü dosyaları oluşturmak için kodlayıcılara geçirilir.

Aşağıdaki örnek, bir'den BitmapFrameBitmapSource nasıl oluşturulduğunu ve ardından bir 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ü kodunu çözme, bir görüntü biçiminin sistem tarafından kullanılabilecek görüntü verilerine çevirisidir. Görüntü verileri daha sonra farklı bir biçimde görüntülemek, işlemek veya kodlamak için kullanılabilir. Kod çözücü seçimi görüntü biçimini temel alır. Belirli bir kod çözücü belirtilmediği sürece codec seçimi otomatiktir. WPF'de Görüntüleri Görüntüleme bölümündeki örneklerde 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, özel biçimlerin WPF uygulamalarında otomatik olarak görüntülenmesini sağlar.

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


// 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 çevirisidir. Kodlanmış görüntü verileri daha sonra yeni görüntü dosyaları oluşturmak için kullanılabilir. WPF Imaging, yukarıda açıklanan görüntü biçimlerinin her biri için kodlayıcılar sağlar.

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

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üleri Görüntüleme

Windows Presentation Foundation (WPF) uygulamasında görüntü görüntülemenin çeşitli yolları vardır. Görüntüler bir Image denetim kullanılarak görüntülenebilir, kullanılarak bir görsele ImageBrushboyanabilir veya kullanılarak ImageDrawingçizilebilir.

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 öznitelik söz dizimi veya özellik söz dizimi olmak üzere iki şekilde kullanılabilir. Aşağıdaki örnekte, hem öznitelik söz dizimi hem de özellik etiketi söz dizimi kullanılarak 200 piksel genişliğinde bir görüntünün nasıl işlenmeleri gösterilmektedir. Öznitelik söz dizimi ve özellik söz dizimi 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 than 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 çoğu bir BitmapImage görüntü dosyasına başvurmak için bir nesne kullanır. BitmapImage Genişletilebilir Uygulama Biçimlendirme Dili (XAML) yüklemesi için iyileştirilmiş bir özelleştirilmiştir BitmapSource ve görüntüleri bir denetim olarak görüntülemenin Source kolay bir Image yoludur.

Aşağıdaki örnekte, kod kullanarak 200 piksel genişliğinde bir görüntünün nasıl işlenme şekli gösterilmektedir.

Dekont

BitmapImage birden çok özellikte başlatmayı ISupportInitialize iyileştirmek için arabirimini uygular. Özellik değişiklikleri yalnızca nesne başlatma sırasında gerçekleşebilir. Başlatmanın BeginInit başladığını EndInit ve başlatmanın tamamlandığını belirten bir çağrı. Başlatıldıktan sonra özellik değişiklikleri yoksayı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 than 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 than 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

Resimleri Döndürme, Dönüştürme ve Kırpma

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

Görüntü döndürmeleri özelliği BitmapImagekullanılarak Rotation gerçekleştirilir. Döndürmeler yalnızca 90 derecelik 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ürme işlemi kullanılarak FormatConvertedBitmapyapılır. Aşağıdaki örneklerde, bir görüntü olarak Gray4dönüştürülür.

<!-- 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ü Clip kırpmak için veya CroppedBitmap özelliği Image kullanılabilir. Genellikle, görüntünün Clip yalnızca bir bölümünü görüntülemek istiyorsanız kullanılmalıdır. Kırpılan bir görüntüyü kodlamanız ve kaydetmeniz gerekiyorsa, CroppedBitmap öğesinin kullanılması gerekir. Aşağıdaki örnekte, kullanılarak Clip özelliği kullanılarak bir EllipseGeometrygörüntü kırpılır.

<!-- 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 Esnetme

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

  • None: Görüntü, çıkış alanını dolduracak şekilde uzatılmaz. Görüntü çıkış alanından büyükse, görüntü çıkış alanına çizilir ve sığmayanları kırpır.

  • Fill: Görüntü, çıkış alanına sığacak şekilde ölçeklendirilir. Görüntü yüksekliği ve genişliği bağımsız olarak ölçeklendirildiğinden, görüntünün özgün en boy oranı korunmayabilir. Diğer bir ifadeyle, çıkış kapsayıcısını tamamen doldurmak için görüntü çarpıtılabilir.

  • Uniform: Görüntü, çıkış alanına 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ı korunarak çıkış alanını tamamen dolduracak şekilde ölçeklendirilir.

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

Aşağıdaki görüntüde örnekten elde edilen çıkış gösterilmektedir ve bir görüntüye uygulandığında farklı Stretch ayarların nasıl etkilediği 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

Resimler, ile Brushboyama yaparak bir uygulamada da görüntülenebilir. Fırçalar, basit, düz renklerden karmaşık desen ve görüntü kümelerine kadar her şeyle UI nesnelerini boyamanızı sağlar. Resimlerle boyamak için kullanın ImageBrush. , ImageBrush içeriğini bit eşlem görüntüsü olarak tanımlayan bir türüdür TileBrush . , ImageBrush özelliği tarafından ImageSource belirtilen tek bir görüntü görüntüler. Görüntünün nasıl uzatıldığını, hizalanıp döşenebileceğini denetleyerek bozulmayı önleyebilir, desenler ve diğer efektler oluşturabilirsiniz. Aşağıdaki çizimde ile ImageBrushelde edilebilecek bazı efektler gösterilmektedir.

ImageBrush output examples
Resim fırçaları şekilleri, denetimleri, metinleri ve daha fazlasını doldurabilir

Aşağıdaki örnekte, kullanarak bir düğmenin arka planını bir resimle boyama gösterilmektedir 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>

Resimler hakkında ImageBrush ek bilgi edinmek ve resimleri boyamak için bkz . Resimler, Çizimler ve Görsellerle Boyama.

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 çoğu dijital kamera, görüntüyü yakalamak için kullanılan kameranın modeli ve modeli hakkında meta veriler içeren görüntüler oluşturur. Her görüntü biçimi meta verileri farklı işler, ancak WPF Görüntüleme desteklenen her görüntü biçimi için meta verileri depolamak ve almak için tekdüzen bir yol sağlar.

Meta verilere erişim, bir BitmapSource nesnenin Metadata özelliği aracılığıyla sağlanır. Metadata , görüntü tarafından kapsanan tüm meta verileri içeren bir BitmapMetadata nesne döndürür. Bu veriler tek bir meta veri şemasında veya farklı düzenlerin 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 Konseyi (IPTC) ve Genişletilebilir Meta Veri Platformu (XMP).

Meta verileri okuma işlemini basitleştirmek için , BitmapMetadataTitleve CameraModelgibi Authorkolayca erişilebilen çeşitli adlandırılmış özellikler sağlar. Bu adlandırılmış özelliklerin çoğu meta veri yazmak için de kullanılabilir. Meta verileri okuma için ek destek, meta veri sorgu okuyucusu tarafından sağlanır. GetQuery yöntemi, "/app1/exif/" gibi bir dize sorgusu sağlayarak meta veri sorgu okuyucusu almak için kullanılır. Aşağıdaki örnekte, GetQuery "/Text/Description" konumunda 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 veri yazmak için meta veri sorgu yazıcısı kullanılır. SetQuery sorgu yazıcısını alır ve istenen değeri ayarlar. Aşağıdaki örnekte, SetQuery "/Metin/Açıklama" konumunda 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 Görüntüleme'nin temel özelliklerinden biri, yeni görüntü codec'leri için genişletilebilirlik modelidir. Bu yönetilmeyen arabirimler, codec geliştiricilerinin codec'leri WPF ile tümleştirmesini sağlar, böylece yeni görüntü biçimleri WPF uygulamaları tarafından otomatik olarak kullanılabilir.

Genişletilebilirlik API'sinin bir örneği için bkz . Win32 Örnek Codec Bileşeni. Bu örnekte, özel görüntü biçimi için kod çözücü ve kodlayıcı oluşturma işlemi gösterilmektedir.

Dekont

Codec bileşeninin sistemin tanıması için dijital olarak imzalanması gerekir.

Ayrıca bkz.