作爲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. 將System.Drawing.Graphics與設備上下文關聯?
- 3. 如何繪製到設備上下文
- 4. 創建設備特定上下文robolectric
- 5. OpenGL獲取設備上下文
- 6. 無法在啓用了ECC的NVIDIA設備上創建上下文
- 7. 爲WebView設置了新的上下文
- 8. FBdialog解僱了幾個Android設備
- 9. 瞭解如何讀取設備列表
- 10. 誰瞭解Windows Phone上的設備方向?
- 11. 問題了解iOS設備上的事件處理
- 12. 如何檢測iOS設備是否下載了語音文件?
- 13. TensorFlow:爲什麼GPU設備只有一個設備上下文(並且真的*)?
- 14. opencl中同一設備上的多個上下文
- 15. 設備上安裝apk文件推到.apk文件設備
- 16. 在iPhone設備上的RAR解壓縮
- 17. Sencha失去了上下文
- 18. 下,在Mac上,對不同設備
- 19. 無法下載在web設備上使用Xamarin在Android設備上
- 20. 下設備方向
- 21. 設備驅動程序IRQL和線程/上下文切換
- 22. 如何獲得打印機設備上下文?
- 23. 如何將設備上下文(wx.DC)放入sizer中? -wxpython
- 24. Play2.4在Android設備上的Scala下載pdf文件
- 25. 從設備上下文初始化控件的成員變量
- 26. android:在設備旋轉時關閉opengl ES上下文切換
- 27. 關於GetDIBits和設備上下文的奇怪錯誤
- 28. 設備在當前上下文中不存在Xamarin Android開發
- 29. 檢查iphone設備上有足夠的空間下載文件
- 30. 在DX9.0c中獲取當前設備上下文
謝謝!關於這個的一些後續問題,那麼:你可以使用不兼容的DC,並且仍然有一個工作程序(雖然慢得多)? SelectObject進入設備上下文兼容性的概念? – Smashery 2010-05-06 01:43:45
@Smashery:編輯了一下,以更好地解決這些問題。 – JustJeff 2010-05-06 02:01:25
謝謝 - 一個非常明確和有用的答案! – Smashery 2010-05-06 05:40:58