![](/img/trans.png)
[英]What is the fastest method to read STDIN data into console app with C++
[英]What is the fastest method to lookup pixel RGB data in C++?
我想查看屏幕上 100 X 100 正方形中每個像素的 RGB 數據並將其存儲在數組中。 我在 for 循環中使用 GetPixel() 得到了這個概念,然后將輸出轉換為十六進制並將 RGB 數據存儲在數組中,但這種方法需要的時間比我想要的要長得多。 用 C++ 讀取像素 RGB 數據的最快方法是什么?
是的, GetPixel
和SetPixel
是相對較慢的 API 調用。 操作單個像素需要將 DC(設備上下文)的內容復制到臨時位圖、映射和定位像素、檢索(或設置)其顏色值,然后(如果正在設置像素的顏色)將臨時位圖傳回到設備上下文。 一旦您了解了為這樣一個看似簡單的操作在幕后進行的所有工作,您就會明白為什么它很慢。 更糟糕的是,必須為每次調用GetPixel
和/或SetPixel
支付開銷,因此您可以看到為什么這些不常用於繪制操作。
替換方法涉及使用GetDIBits
,這是確定多個像素值的最快方法。 該函數本質上是將設備上下文 (DC) 的內容復制到一個臨時的設備無關位圖 (DIB) 中,然后您可以根據需要查看或操作該位圖。 確定單個像素的顏色值就像索引該像素在內存中的位置一樣簡單。 使用這種方法,您可以每秒處理數百萬個像素。 檢索像素顏色值的開銷僅在開始時支付一次。
要模擬SetPixel
,您需要操作所需的像素值,然后調用SetDIBits
來更新設備上下文(例如,屏幕)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.