2010-04-06 25 views
5

Trong handler sơn điều khiển người dùng của tôi, tôi lặp trên một tập hợp các đối tượng Bitmap được xác định trước và lôi kéo họ vào vùng client thusly:Làm cách nào để tăng hiệu suất trên DrawImage của GDI (Unscaled)?

C# phiên bản:

private void Control_Paint(object sender, PaintEventArgs e) { 
    Graphics g = e.Graphics; 
    foreach (BitmapObj bmpObj in _bitmapObjCollection) { 
     g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location); 
    } 
} 

phiên bản 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 

Mã hoạt động tốt nhưng bắt đầu giảm xuống khi có thêm một tá đối tượng được thêm vào bộ sưu tập. Câu hỏi của tôi là: Có cách nào để tăng tốc độ này không? Nó sẽ có thể sử dụng chức năng bitblt Win32 để thay thế DrawImageUnscaled? Và nếu thế thì sao?

Cảm ơn!

Lưu ý: Googling cho năng bảo mật bằng của bitblt đã chỉ mang lại cho tôi mẫu nắp màn hình cho đến nay ...

+0

ping lại @ http://stackoverflow.com/questions/264720/gdi-graphicsdrawimage-really-slow – dankyy1

Trả lời

6

Quá trễ, nhưng có thể ai đó vẫn cần một giải pháp.

Tôi đã tạo nhỏ thư viện GLGDI + với tương tự GDI + cú pháp, mà chạy theo OpenTK: http://code.google.com/p/glgdiplus/

Tôi không chắc chắn về sự ổn định, nó có một số vấn đề với Drawstring (vấn đề với TextPrint từ OpenTK). Nhưng nếu bạn cần tăng hiệu suất cho tiện ích của bạn (như trình chỉnh sửa cấp trong trường hợp của tôi), nó có thể là giải pháp.

+0

Rất thú vị. Tôi sẽ xem qua một chút. Cảm ơn. –

Các vấn đề liên quan