簡體   English   中英

在 C++ 中查找像素 RGB 數據的最快方法是什么?

[英]What is the fastest method to lookup pixel RGB data in C++?

我想查看屏幕上 100 X 100 正方形中每個像素的 RGB 數據並將其存儲在數組中。 我在 for 循環中使用 GetPixel() 得到了這個概念,然后將輸出轉換為十六進制並將 RGB 數據存儲在數組中,但這種方法需要的時間比我想要的要長得多。 用 C++ 讀取像素 RGB 數據的最快方法是什么?

是的, GetPixelSetPixel是相對較慢的 API 調用。 操作單個像素需要將 DC(設備上下文)的內容復制到臨時位圖、映射和定位像素、檢索(或設置)其顏色值,然后(如果正在設置像素的顏色)將臨時位圖傳回到設備上下文。 一旦您了解了為這樣一個看似簡單的操作在幕后進行的所有工作,您就會明白為什么它很慢。 更糟糕的是,必須為每次調用GetPixel和/或SetPixel支付開銷,因此您可以看到為什么這些不常用於繪制操作。

替換方法涉及使用GetDIBits ,這是確定多個像素值的最快方法。 該函數本質上是將設備上下文 (DC) 的內容復制到一個臨時的設備無關位圖 (DIB) 中,然后您可以根據需要查看或操作該位圖。 確定單個像素的顏色值就像索引該像素在內存中的位置一樣簡單。 使用這種方法,您可以每秒處理數百萬個像素。 檢索像素顏色值的開銷僅在開始時支付一次。

要模擬SetPixel ,您需要操作所需的像素值,然后調用SetDIBits來更新設備上下文(例如,屏幕)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM