作爲MFC的一個相對新手,我看到很多設備上下文(DC)。我隱約明白,這是與繪圖有關的事情,但具體細節沒有很好解釋,我可以找到任何地方。創建「兼容設備上下文」是什麼意思,爲什麼它很重要? SelectObject是做什麼的,我怎樣才能首先使DC兼容?瞭解設備上下文
Q
瞭解設備上下文
7
A
回答
11
設備上下文只是繪圖發生的地方,所以如果你有兩個不同的DC,你在兩個不同的地方繪圖。有點像文件句柄。
設備上下文可以指屏幕上的房地產,或位於內存中的位圖,也可能是其他地方,這些只是我現在可以想到的兩個。
兼容上下文是指具有相同底層像素組織的數據,其中每個像素的位數,每個像素的字節數,顏色組織等等。內存位圖設備上下文可以有你想要的任何組織,但是你的屏幕上下文將與你的顯卡上的緩衝區相關(最終),這將取決於模式等,具有特定的像素組織。
兼容的上下文意味着它有效地在它們之間傳輸圖像數據,因爲很少或不需要翻譯數據。另一方面,如果你有一個256色的調色板,8位的地圖,並且你試圖把它移動到每個像素RGBA有8位的屏幕上,那麼每個最後一個像素都需要大量的按摩,因爲它被複制,所以複製不兼容位圖速度非常慢。根據Win32 SDK文檔,至少BitBlt()和StretchBlt()「將源顏色格式轉換爲匹配目標格式」,因此可以完成。
調查CreateCompatibleDC()和CreateCompatibleBitmap()作爲如何創建與現有兼容的繪圖上下文的起點。
SelectObject()控制哪些資源當前在設備上下文中處於活動狀態。上下文有當前筆,畫筆,字體和位圖。通過允許您指定更少的參數,這些使得很多其他GDI調用變得更簡單。例如,當你使用TextOut()時,你不必指定字體,但是如果你想改變字體,那就是SelectObject()進來的地方。如果你給SelectObject()提供一個字體句柄,返回值是有效字體的句柄,並且後續操作使用新字體。其他種類的資源,筆,筆刷等的行爲是相同的。
相關問題
- 1. 瞭解邏輯上下文
- 2. 瞭解設備樹機制
- 3. 解壓縮設備上的文件
- 4. 如何繪製到設備上下文
- 5. 如何清除設備上下文?
- 6. 在Android設備上下載大文件
- 7. 將System.Drawing.Graphics與設備上下文關聯?
- 8. OpenGL獲取設備上下文
- 9. 創建設備特定上下文robolectric
- 10. 虛擬打印機設備上下文
- 11. 瞭解Spring MVC中的上下文
- 12. 在perl中瞭解上下文
- 13. 無法在啓用了ECC的NVIDIA設備上創建上下文
- 14. 爲WebView設置了新的上下文
- 15. 瞭解設備是否具有軟鍵
- 16. FBdialog解僱了幾個Android設備
- 17. 瞭解如何讀取設備列表
- 18. 誰瞭解Windows Phone上的設備方向?
- 19. 問題了解iOS設備上的事件處理
- 20. 如何檢測iOS設備是否下載了語音文件?
- 21. 是否有必要刪除渲染上下文並銷燬設備上下文?
- 22. TensorFlow:爲什麼GPU設備只有一個設備上下文(並且真的*)?
- 23. 在任何平臺/設備上創建上下文
- 24. opencl中同一設備上的多個上下文
- 25. ipad設備上的測試文件給出了錯誤
- 26. 移動網站文本在Android設備上搞砸了
- 27. 設備上安裝apk文件推到.apk文件設備
- 28. 在iPhone設備上的RAR解壓縮
- 29. 解析,保存操作(在設備上)
- 30. 解碼上的其他設備
謝謝!關於這個的一些後續問題,那麼:你可以使用不兼容的DC,並且仍然有一個工作程序(雖然慢得多)? SelectObject進入設備上下文兼容性的概念? – Smashery 2010-05-06 01:43:45
@Smashery:編輯了一下,以更好地解決這些問題。 – JustJeff 2010-05-06 02:01:25
謝謝 - 一個非常明確和有用的答案! – Smashery 2010-05-06 05:40:58