كيفية زيادة الأداء على DRALIMAGE GDI (غير محدد)؟
-
24-09-2019 - |
سؤال
في معالج الطلاء الخاص بعنصر المستخدم الخاص بي ، أتكرر على مجموعة من كائنات الصورة النقطية المحددة مسبقًا ورسمها إلى منطقة العميل بالتالي:
C# الإصدار:
private void Control_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
foreach (BitmapObj bmpObj in _bitmapObjCollection) {
g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location);
}
}
إصدار VB.NET:
Private Sub Control_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
Dim g As Graphics = e.Graphics
For Each bmpObj As BitmapObj In _bitmapObjCollection
g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location)
Next
End Sub
يعمل الرمز بشكل جيد ولكنه يبدأ في الانخفاض عند إضافة عشرات الكائنات أو نحو ذلك إلى المجموعة. سؤالي هو: هل هناك طريقة لتسريع هذا؟ هل سيكون من الممكن استخدام وظيفة Win32 Bitblt لاستبدال DrawImageunscaled؟ وإذا كان الأمر كذلك ، فكيف؟
شكرًا!
ملاحظة: لم تسفر غوغلينغ لاستخدام Bitblt إلا عن عينات شاشة حتى الآن ...
المحلول
بعد فوات الأوان ، ولكن ربما لا يزال هناك من يحتاج إلى حل.
لقد قمت بإنشاء مكتبة صغيرة GLGDI+ مع بناء جملة GDI+ Similiar ، والتي تعمل على Opentk:http://code.google.com/p/glgdiplus/
لست متأكدًا من الاستقرار ، ولديه بعض المشكلات مع الرباط (مشكلة مع TextPrint من Opentk). ولكن إذا كنت بحاجة إلى زيادة الأداء لفائدتك (مثل محرر المستوى في حالتي) ، فيمكن أن يكون الحل.