مشاركة عبر


نظرة عامة حول التصوير

يوفر هذا الموضوع مقدمة ل مكون تصوير Microsoft Windows Presentation Foundation. WPF Imaging يتيح للمطورين لعرض وتحويل وتنسيق الصور.

يشتمل هذا الموضوع على الأقسام التالية.

  • مكونات التصوير WPF
  • تنسيقات صور
  • عرض صورة في WPF
  • بيانات تعريف صورة
  • برنامج ضغط الوسائط وفكها القابلية للتوسعة
  • موضوعات ذات صلة

مكونات التصوير WPF

WPF Imaging يوفر تحسينات هامة في قدرات تاتصوير داخلMicrosoft Windows. قدرة التقاط الصور مثل عرض صورة نقطية أو باستخدام صورة على سيطرة مشتركة تعتمد في السابق على واجهة جهاز رسومية في Microsoft Windows (GDI) أو Microsoft Windows GDI+ المكتبات. هذه APIيوفر الأساس الأداء الوظيفي لصور، ولكن عدم توفر ميزات مثل دعم برنامج ضغط الوسائط وفكها التوافق مع البرامج الخارجية ودقة عالية بنسخة الدعم. WPF Imaging is designed to overcome the shortcomings of GDI and GDI+ and provide a new set of API to display and use images within your applications.

هناك طريقتان للوصول إلى WPF Imaging APIمكونات مدارة و غير مدار المكون. تعليمات برمجية غير مدارة توفر الميزات التالية.

  • القابلية للتوسعة طراز للرسائل الجديدة أو المالك صواب تنسيقات. تنسيقات نموذج لصورة أشكال جديدة أو خاصة.

  • تحسين الأداء والأمان على صيغ الصور تنسيقات بما في ذلك صورة نقطية (BMP) ، تنسيق Joint Photographics Experts Group (JPEG) ، Portable Network Graphics (PNG) ، تنسيق ملف صور ذو علامات (TIFF) ، Microsoft Windows Media Photo ، تنسيق تبادل الرسومات (GIF) ، و الرمز (.ico).

  • ميزة الاحتفاظ بحالة بيانات الصورة عمق البت العالي بعمق يصل الى 8 بت لكل قناة (32 بت لكل بكسل).

  • قياس الصورة غير تدميرى الاقتصاص و التناوب.

  • تبسيط إدارة الألوان.

  • دعم بيانات التعريف في ملف، أو المالك.

  • تستخدم المكونات المدارة البنية الأساسية غير المُدارة لتوفير التكامل السلس الصور مع الآخرين WPF ميزات مثل واجهة المستخدم (UI) الحركة ، و الرسومات. تمكن مكون أيضاً الفوائد من Windows Presentation Foundation (WPF) تنسيقات الصور برنامج الترميز القابلية للتوسعة طراز والذي يمكّن التعرف التلقائي على صورة جديدة في WPF التطبيقات.

معظم المدارة WPF Imaging APIالموجودة في System.Windows.Media.Imaging مساحة اسم بالرغم من عدة الهامة أنواع, مثل ImageBrush و ImageDrawing الموجودة في System.Windows.Media مساحة الاسم و Image الموجودة في System.Windows.Controls مساحة الاسم.

يوفر هذا الموضوع معلومات إضافية عن المكونات المدارة. للحصول على مزيد من المعلومات حول غير مدار API راجع وثائق غير مدار WPF مكونات التصوير.

تنسيقات صور

برنامج يرمّز هو المستخدم لفك يرمّز أو يرمّز بتنسيق وسائط معين. WPF Imagingيتضمن برنامج ترميزBMP,JPEG,PNG,TIFF,Windows Media Photo,GIFنسخة رمز و التنسيقات. كل من برامج الترميز هذه تمكين التطبيقات لفك ترميز ، و باستثناء الرمز ، ترميز تنسيقات الصور الخاصة بهم.

BitmapSource هو دراسي هامة المستخدمة في فك ترميز و التشفير للصور. كانت كتلة الإنشاء الأساسية WPF Imaging خط أنابيب و يمثل خط واحد ، مجموعة ثابتة من وحدات البكسل في معينة ودقة الحجم. BitmapSource يمكن أن يكون الاطار الفردي للصورة إطار متعدد ، أو يمكن أن تكون نتيجة التحويل إجراء على BitmapSource. وهو أصل العديد من الفئات الأساسية المستخدمة في WPF التقاط الصور مثل BitmapFrame.

BitmapFrame يستخدم في تخزين الصور النقطية الفعلي لتنسيق الصورة. دعم العديد من تنسيقات الصور واحد فقط
 BitmapFrame ، على الرغم من أن تنسيق مثل GIF TIFF تدعم الإطارات المتعددة في الصورة. يتم استخدام الإطارات من قبل وحدات فك ترميز كإدخال بيانات و تم تمريرها إلى الترميز لإنشاء ملفات الصور.

يوضح المثال التالي كيفية BitmapFrame تم إنشاؤها من BitmapSource ثم إضافة TIFF الصورة.

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)
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);

فك الترميز لتنسيق الصورة

فك ترميز الصور عبارة ترجمة تنسيق الصورة إلى صورة بيانات التي يمكن استخدامها من قبل النظام. بيانات الصورة يمكن عندئذٍ استخدام عرض أو معالجة أو ترميز إلى تنسيق مختلف. تحديد وحدة فك ترميز يستند إلى بيانات الصورة . يتم تحديد برنامج ترميز الصوت/الفيديو تلقائياً ما لم يتم تعيين وحدة فك ترميز معينة. توضح الأمثلة في المقطع عرض الصور في WPF فك ترميز التلقائي. وضعت وحدات فك ترميز تنسيق مخصص باستخدام غير المدارة WPF Imaging واجهات والمسجلة لدى نظام مشاركة تلقائيا في اختيار فك الترميز. يسمح هذا تنسيقات مخصصة ليتم عرضها بشكل تلقائي في WPF التطبيقات.

يوضح المثال التالي استخدام وحدة فك ترميز الصور النقطية فك ترميز على BMP تنسيق الصورة.

' 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)

// 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
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);

ترمميز تنسيق الصورة

صورة الترميز هو ترجمة بيانات الصورة إلى تنسيق الصورة المحددة. يمكن بعد ذلك استخدام بيانات المرمزة الصورة إلى إنشاء ملفات صورة جديدة. WPF Imagingيوفر encoders لكل من نسخة تنسيقات الموضحة أعلاه.

يوضح المثال التالي استخدام الترميز لحفظ صورة نقطية تم إنشاؤها حديثًا.

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)
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);
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);

عرض صورة في WPF

هناك عدة طرق لعرض صورة في Windows Presentation Foundation (WPF) التطبيق. يمكن عرض الصور باستخدام Imageعنصر تحكم ، مطلى الدخول المرئية باستخدام ImageBrush, أو رسمها باستخدام ImageDrawing.

استخدام عنصر تحكم الصورة

Image هو عنصر الإطار والطريقة الأساسية لعرض الصور في التطبيقات. في XAML ، Image يمكن استخدام بطريقتين; السمة بناء الجملة أو الخاصية بناء الجملة. يظهر المثال التالي كيفية تقديم صورة 200 بكسل عريض باستخدام كليهما سمة بناء الجملة وبناء العلامة الخاصية. للحصول على مزيد من المعلومات حول سمة بناء الجملة وبناء جملة الخاصية, راجع نظرة عامة حول خصائص التبعية.

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

العديد من الأمثلة باستخدام BitmapImageالكائن إلى مرجع نسخة الملف. BitmapImageهو متخصصةBitmapSourceالتي هوExtensible Application Markup Language (XAML)تحميل و هو طريقة سهلة للصور dهوplaySourceمنImageعنصر التحكم.

يوضح المثال التالي كيفية تقديم صورة بعرض 200 بكسل باستخدام التعليمات البرمجية.

ملاحظةملاحظة

BitmapImage يطبّقISupportInitialize واجهة لتحسين التهيئة على خصائص متعددة.خاصية يمكن بها حدوث التغييرات فقط أثناء تهيئة الكائن.استدعاء BeginInit الى إشارة بدأت التهيئة هذا ثم EndInit الى إشارة اكتمال ذلك التهيئة.تهيئة مرة واحدة يتم تجاهل التغييرات.

' 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
// 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;

تدوير و تحويل صور الاقتصاص

WPF تمكّين المستخدمين من تحويل الصور باستخدام خصائصBitmapImage أو باستخدام إضافيةBitmapSource كائنات مثلCroppedBitmap أوFormatConvertedBitmap. هذه نسخة يمكن تغيير حجم تحويلات أو استدارة صورة, تغيير تنسيق بكسل , أو الاقتصاص من صورة.

يتم تنفيذ تناوب الصورة باستخدام Rotation خاصية من BitmapImage. يمكن فقط تنفيذ التناوب بزيادة 90 درجة. في المثال التالي يتم استدارة الصورة 90 درجة.

<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.
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
// 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;

تحويل صورة الى تنسيق بكسل مختلفة مثل إجراء الرمادي باستخدام FormatConvertedBitmap. في الأمثلة التالية، يتم تحويل صورة الى 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
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
//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;

لاقتصاص صورة إما Clip بالخاصية من Image أو CroppedBitmap ليتم استخدامها. بشكل عام، إذا كنت ترغب فقط في عرض جزء من صورة Clip يجب استخدامها. إذا كنت تحتاج الى ترميز وحفظ صورة اقتصاصها CroppedBitmap يجب استخدامها. في المثال التالي، يتم اقتصاص صورة باستخدام خاصية كليب باستخدام 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
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
//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;

تمدد الصور

Stretchخاصية التحكم في كيفية تمديد صورة لتعبئة الحاوية الخاصة به. خاصية Stretch تقبل القيم التالية المعرّفة من قِبل Stretch التعداد:

  • None: لم يتم تمديد الصورة لتعبئة منطقة الانتاج. إذا كانت الصورة أكبر من ناحية الاخراج يتم رسم الصورة إلى منطقة الانتاج لقتصاص ما لا تلائم.

  • Fill: يتم قياس الصورة لتناسب ناحيةالانتاج. لأن يتم تحجيم ارتفاع الصورة وعرضها بشكل مستقل ، قد لا يتم الاحتفاظ بنسبة الارتفاع الأصلي للصورة . أي، قد تكون الصورة مشوهه الصورة من اجل تعبئة منطقة الانتاج بشكل كامل الحاوية.

  • Uniform: يتم قياس الصورة وبالتالي يتم احتواؤها بشكل كامل ضمن منطقة الانتاج. يتم الاحتفاظ بنسبة العرض إلى الارتفاع والصور.

  • UniformToFill: يتم قياس الصورة بحيث تملأ بشكل كامل منطقة الانتاج مع الاحتفاظ الصورة الأصلية نسبة العرض إلى الارتفاع.

المثال التالي يتم تطبيق كل من المتوفرة Stretch التعدادات الى Image.

يظهر الإخراج من المثال الصورة التالية كما يوضح تأثيرات مختلفة Stretch تحتوي الإعدادات عند تطبيق الصورة.

إعدادات تمدد مختلفة

إعدادات توسيع TileBrush مختلفة

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://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>

اللوحة ، مع صور

يمكن عرض الصور في أحد تطبيقات بواسطة تشكيل اللوحة Brush. تمكنك الفرش من رسم كائنات واجهة المستخدم من أي شيء بسيط ، الألوان الخالصة إلى المجموعات المعقدة من النقوش و الصور. لرسم لوحة مع الصور، استخدام ImageBrush. ImageBrush نوع من TileBrush أن يعرف محتواه كصورة نقطية. يعرض ImageBrush صورة واحدة ، والذي يحددها خاصية ImageSource. يمكنك التحكم في كيفية تمديد الصورة ، والانحياز ، والمغطى ، مما يتيح لك لمنع التشويه وإنتاج أنماط وآثار أخرى. يبين الرسم التوضيحي التالي بعض التأثيرات يمكن الحصول عليها مع ImageBrush.

يمكن ملء و فرش صورة بالأشكال ، وضوابط ، والنص ، وأكثر من ذلك

أمثلة لإخراح ImageBrush

المثال التالي يوضح كيفية رسم خلفية زر واحدة مع صورة باستخدام 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>

للحصول على معلومات إضافية حول ImageBrush ومشاهدة الصور المطلية رسم صور و رسومات و صور.

بيانات تعريف صورة

بعض ملفات الصور تحتوي على البيانات التي تصف المحتوى أو خصائص الملف. على سبيل المثال، إنشاء معظم الكاميرات الرقمية الصور التي تحتوي على بيانات تعريف حول الكاميرا المستخدم لالتقاط الصورة وطرازه. كل شكل صورة يعالج بطريقة مختلفة ولكن التعريف WPF Imaging يوفر طريقة او وسيلة موحدة للتخزين واسترجاع البيانات الوصفية لكل شكل صورة معتمدة.

الوصول إلى بيانات التعريف هو المتوفرة من خلال Metadataخاصية BitmapSourceالكائن. MetadataإرجاعBitmapMetadataالكائن الذي يحتوي على الجميع بيانات التعريف بالصورة. قد تكون هذه البيانات في أحد بيانات التعريف مخطط أو تركيبة من أنظمة مختلفة. WPF Imagingيدعم رسوم تخطيطية بيانات تعريف الصورة التالية: Exchangeable image file (Exif) ، نص (PNG بيانات النصية) ،دليل ملف الصور (IFD) ،مجلس الاتصالات للصحافة الدولية (IPTC) ، والنظام الأساسي لبيانات التعريف القابلة للامتداد (XMP).

من أجل تبسيط عملية قراءة البيانات الوصفية ، BitmapMetadata يوفر العديد من الخصائص المسماة التي يمكن الوصول بسهولة إلى مثل Author ، Title ، و CameraModel. ويمكن أيضا العديد من هذه الخصائص اسمه أن تستخدم لكتابة بيانات التعريف. يتم توفير دعم إضافي لقراءة بيانات التعريف بواسطة القارئ للاستعلام عن بيانات التعريف. GetQuery اويستخدم أسلوب لاسترداد القارئ الاستعلام الفوقية من خلال توفير سلسلة الاستعلام مثل "/ app1/exif /" . في المثال التالي GetQuery يُستخدم للحصول على النص المخزن في "/ نص/الوصف" الموقع.

' 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()

// 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.
TextBlock^ myTextBlock = gcnew TextBlock();
myTextBlock->Text = "The Description metadata of this image is: " + pngInplace->GetQuery("/Text/Description")->ToString();

لكتابة بيانات التعريف، كاتب استعلام بيانات تعريف هو المستخدمة. SetQueryيحصل على الكاتب الاستعلام و يقوم بتعيين القيمة المطلوبة. في المثال التالي SetQuery يُستخدم للحصول على النص المخزن في "/ نص/الوصف" الموقع.

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()
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();
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();

برنامج ضغط الوسائط وفكها القابلية للتوسعة

ومن السمات الأساسية WPF Imaging هو طراز القابلية للتوسعة الصورة الجديدة برامج ضغط الوسائط وفكها. هذه الواجهات غير مدار تمكين المطورين الترميز لدمج مع برامج الترميز WPF بحيث يمكن استخدام تنسيقات الصورة الجديدة بشكل تلقائي من قبل WPF التطبيقات.

للحصول على نموذج من القابلية للتوسعة API, راجع صواب نموذج Win32 . هذا النموذج يوضح كيفية إنشاء وحدة فك ترميز وترميز لتنسيق صورة مخصصة.

ملاحظةملاحظة

ويجب أن يكون الترميز رقميا لنظام ليتعرف عليه.

راجع أيضًا:

المرجع

BitmapSource

BitmapImage

Image

BitmapMetadata

المبادئ

أمثلية الأداء: الرسومات ثنائية الأبعاد و التصوير

موارد أخرى

ترميز نموذج Win32