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

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

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

  • الرسم و الأشكال
  • كائنات StreamGeometry
  • كائنات DrawingVisual
  • صور
  • موضوعات ذات صلة

الرسم و الأشكال

WPF يوفر كلDrawing وShape الكائنات لتمثيل محتوى الرسم ‏‫رسوميا‬. ومع ذلك، Drawingالكائنات هي ثوابت أسهل من Shape الكائنات و توفر صفات لأداء أفضل.

Shape يسمح لك رسم شكل رسومي إلى الشاشة. لأنه تم اشتقاقه من، FrameworkElement الفئة Shape يمكن استخدام كائنات داخل لوحات و معظم عناصر التحكم.

WPF يقدم طبقات عديدة من الوصول إلى الرسومات و تقديم الخدمات. في طبقة إلى p، Shapeالكائنات بسهولة إلى استخدام وتوفير العديد من الميزات المفيدة مثل الأحداث والتخطيط معالجة. WPFيوفر عددا من تجهيز-إلى-استخدم الشكل الكائنات. ترث كافة كائنات الشكل فئة Shape. الأشكال المتوفرة للكائنات تتضمن Ellipse ، Line ، Path ، Polygon ، Polyline ، و Rectangle.

Drawing الكائنات، ومن ناحية أخرى، لا ينحدر منFrameworkElement الفئة و يوفر تطبيق أخاف وزنا لتقديم الأشكال و الصور و النص.

توجد أربعة أنواع من كائنات Drawing:

GeometryDrawing يتم استخدام كائن لتقديم المحتوى الهندسي. Geometry فئة وفئات الخرسانة الذي ينحدر من, مثل CombinedGeometry ، EllipseGeometry ، و PathGeometry ، توفر وسيلة لتقديم الرسومات ثنائية الأبعاد كما أنه يوفر اختبار التوصل و دعم الاقتصاص. يمكن استخدام كائنات الهندسة لتعريف منطقة عنصر التحكم على سبيل المثال، أو لتعريف منطقة الاقتصاص لتطبيقه على صورة. يمكن أن تكون كائنات الهندسة مناطق بسيطة مثل المستطيلات و الدوائر أو, مناطق مركبة يتم إنشائها من اثنين أو أكثر من كائنات الهندسة. يمكن إنشاء مناطق هندسية أكثر تعقيداً بواسطة ضم PathSegment - الكائنات المشتقة, مثل ArcSegment ، BezierSegment ، و QuadraticBezierSegment.

على السطح, Geometry فئة و Shape فئة مشابهة تماماً. يتم استخدام كلاهما في عرض الرسومات ثنائية الأبعاد و كلاهما يتضمن فئة محددة مشابهة التي تنحدر منها, على سبيل المثال، EllipseGeometry و Ellipse. ومع ذلك، هناك اختلافات هامة بين هذه المجموعتين من الفئات. أحد Geometry فئة تفتقر بعض الوظائف Shape فئة, مثل إمكانية رسم نفسه. لرسم كائن هندسي ، فئة أخرى مثل DrawingContext أو رسم أو مسار (وهو يجب الانتباه إلى أن مسار هو شكل) يجب أن يتم استخدامه لإجراء عملية الرسم. خصائص العرض مثل التعبئة و الضغطة و سمك ضغط المفاتيح الموجودة على الفئة التي ترسم كائن الهندسة ،حيث يحتوي الكائن على هذه الخصائص. طريقة للتفكير في هذا الاختلاف هو أن يعرّف كائن الهندسة منطقة و دائرة على سبيل المثال، أثناء تعريف كائن الشكل في منطقة, يقوم بتعريف كيفية تعبئة المنطقة و كيفية إحاطتها و يشارك في نظام تخطيط.

منذ Shape الكائنات تشتق من FrameworkElement فئة, استخدامها يمكنه الإضافة بشكل ملحوظ لاستهلاك ذاكرة أكثر في التطبيق. إذا كنت فعلاً لا تحتاج FrameworkElement الميزات للمحتوى الرسومي الخاص بك فعليك استخدام الكائنات الأخف وزنا Drawing.

لمزيد من المعلومات على الكائنات Drawingراجعنظرة عامة حول كائنات الرسم.

كائنات StreamGeometry

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

يستخدم المثال التالي بناء جملة السمة من أجل إنشاء مثلث StreamGeometry في XAML.

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

    <Path Data="F0 M10,100 L100,100 100,50Z" 
      StrokeThickness="1" Stroke="Black"/>

  </StackPanel>
</Page>

لمزيد من المعلومات على الكائنات StreamGeometryراجعكيفية القيام بما يلي: إنشاء شكل باستخدام StreamGeometry.

كائنات DrawingVisual

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

صور

WPF التصوير يوفر تحسين هام عبر قدرات التصوير في الإصدارات السابقة منWindows. قدرات التصوير, مثل عرض صورة نقطية أو استخدام صورة على عنصر تحكم شائع تم معالجتها بشكل أساسي من قبلMicrosoft Windows Graphics Device Interface (GDI) أو Microsoft Windows GDI + واجهة برمجة التطبيقات (API). هذه API توفر أساس وظيفة التصوير لكن تفتقد ميزات مثل دعم القابلية للتوسع في برنامج ضغط الوسائط وفكها و دعم دقة الصورة. تمت إعادة تصميم تصوير API WPF للتغلب على عيوب GDI و GDI + و توفر مجموعة جديدة من API لعرض واستخدام الصور ضمن التطبيقات الخاصة بك.

عند استخدام الصور ، خذ بعين الاعتبار التوصيات التالية للحصول على أداء أفضل:

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

  • دوماً فك ترميز الصورة للحجم المرغوب فيه و ليس الحجم الافتراضي. كما مذكور أعلاه, اطلب WPF لفك ترميز الصورة إلى الحجم المطلوب و ليس الحجم الافتراضي الكامل. سيتم تقليل ليس فقط مجموعة العمل للتطبيق الخاص بك و لكن سرعة التنفيذ أيضاً.

  • إذا كان الأمر ممكناً، دمج الصور في صورة مفردة, مثل شريط فيلم مؤلف من عدة صور.

  • لمزيد من المعلومات، راجع نظرة عامة حول التصوير.

BitmapScalingMode

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

يوضح المثال التالي كيفية تعيين BitmapScalingMode لكائن صورة.

            ' Set the bitmap scaling mode for the image to render faster.
            RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.LowQuality)
// Set the bitmap scaling mode for the image to render faster.
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.LowQuality);

CachingHint

بشكل افتراضي ، WPF لا يخزن مؤقتا المحتويات المقدمة TileBrush كائنات مثل DrawingBrush و VisualBrush. في وحدات السيناريو الثابتة حيث لم يكن أي من المحتويات أو استخدام TileBrush في المشهد يتغير ، مما يجعله ملائماً ، لأنه يحفظ ذاكرة فيديو. ليس منطقيا عند TileBrush استخدام محتوى ثابت بطريقة غير ثابتة — على سبيل المثال، عند ثابت DrawingBrush أو VisualBrush تم تعيينه إلى سطح استدارة كائن ثلاثي الأبعاد. السلوك الافتراضي WPF هو إعادة تقديم المحتوى بالكامل DrawingBrush أو VisualBrush لكل إطار, بالرغم من أن المحتوى لا يتغير.

بواسطة تعيين خاصية CachingHint من كائن RenderOptions إلى Cache يمكنك زيادة الأداء باستخدام الإصدارات المخزنة مؤقتاً من كائنات الفرشاة المتجانبة.

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

يوضح المثال التالي كيفية استخدام خيار تلميح التخزين المؤقت DrawingBrush.

            ' Set the minimum and maximum relative sizes for regenerating the tiled brush.
            RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5)
            RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0)

            ' The tiled brush will be regenerated when the size is
            '   0.5x, 0.25x (and so forth)
            ' and
            '   2x, 4x, 8x (and so forth)
            ' of the original size.

            ' Set the caching hint option for the brush.
            RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache)
// Set the minimum and maximum relative sizes for regenerating the tiled brush.
RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5);
RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0);

// The tiled brush will be regenerated when the size is
//   0.5x, 0.25x (and so forth)
// and
//   2x, 4x, 8x (and so forth)
// of the original size.

// Set the caching hint option for the brush.
RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache);

راجع أيضًا:

المبادئ

تحسين أداء تطبيق WPF

التخطيط لأداء التطبيق

أمثلية الأداء: الاستفادة من الأجهزة

أمثلية الأداء: التصميم و التخطيط

أمثلية الأداء: سلوك كائن

أمثلية الأداء: موارد التطبيق

أمثلية الأداء: Text

أمثلية الأداء: ربط البيانات.

أمثلية الأداء: توصيات أخرى

أدوات الأداء WPF و الموارد

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