سؤال

في معالج الطلاء الخاص بعنصر المستخدم الخاص بي ، أتكرر على مجموعة من كائنات الصورة النقطية المحددة مسبقًا ورسمها إلى منطقة العميل بالتالي:

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). ولكن إذا كنت بحاجة إلى زيادة الأداء لفائدتك (مثل محرر المستوى في حالتي) ، فيمكن أن يكون الحل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top