2009-05-13 24 views
5

Tôi muốn vẽ một dib trên một HDC, cùng kích thước. Tôi đang sử dụng: des và src có cùng kích thước.StretchDIBits có vẻ chậm, API có nhanh hơn không?

::StretchDIBits(hdc, 
       des.left,des.top,des.right - des.left,des.bottom - des.top, 
       src.left, GetHeight() - src.bottom, src.right - src.left,src.bottom - src.top, 
       m_pImg->accessPixels(),m_pImg->getInfo(), DIB_RGB_COLORS, SRCCOPY); 

nhưng tôi thấy nó chậm, vì kích thước des là như nhau, tôi chỉ cần sao chép dib lên dc. Có phương pháp nào nhanh hơn StretchDIBits không?

cũng giống như

StretchBlt (slow) vs Bitblt.(faster) 
StretchDIBits (slow) vs ?(faster) 
+0

Chỉ vì tò mò, loại m_pImg là gì? – Pumkko

Trả lời

8

Sự khác biệt tốc độ xuất phát từ làm bất kỳ chuyển đổi màu sắc cần thiết, thêm vào tính tổng quát cần thiết để xử lý sự kéo căng (ngay cả khi kích thước mục tiêu của bạn là giống như kích thước nguồn của bạn).

Nếu bạn chỉ vẽ hình ảnh một lần, thì tôi nghĩ chức năng bạn đang tìm kiếm là SetDIBitsToDevice.

Nếu bạn quan tâm đến tốc độ vì bạn đang vẽ cùng DIB nhiều lần, thì bạn có thể cải thiện hiệu suất bằng cách sao chép DIB vào bộ nhớ tương thích DC một lần và sau đó BitBlt từ bộ nhớ DC sang màn hình (hoặc máy in) mỗi khi bạn cần. Sử dụng CreateCompatibleDC để tạo bộ nhớ DC, và sau đó sử dụng StretchDIBits hoặc SetDIBitsToDevice để có được hình ảnh trên đó. Sau đó, bạn có thể sử dụng trực tiếp BitBlt. Bạn cũng có thể xem xét sử dụng một DIBSECTION, cho phép thỏa hiệp về hiệu suất giữa DIB thực và một DC tương thích.

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