画面全体からピクセルの RGB カラーを操作する必要があるミニ プロジェクトに取り組んでいます。私がこれまでに思いついた解決策は、スクリーンショットを連続して撮り、少し処理して RGB カラーを見つけることです。十分に高速ですが、スクリーンショット部分のために多くの CPU 使用率が必要です。
そのため、C++ ライブラリ、opengl*、または別のアプローチを使用して、必要なデータを (行列形式で) コンピューター メモリまたは GPU メモリから抽出できる方法があるかどうか疑問に思っていました。
Windows 7 64bit を使用していますが、解決策がクロスプラットフォーム (windows/linux/mac) であることが望ましいです。また、ソリューションが C/C++/Java/Python で実装できるとよいでしょう (これらのどれでも可能です)。
*先週いくつかの調査を行いましたが、opengl では可能ではないと思います。しかし、私はよくわかりません...
EDIT現在、JavaとPythonで、ディスプレイ全体のスクリーンショットを撮り、ピクセルのRGBカラーを平均化する作業コードがあります。Java では処理とロボット ライブラリを使用し、Python では PIL を使用します。Java では、createScreenCapture() で画像を取得し、getRGB() で値を読み取ります。Python では、ImageGrab.grab() で画像を取得し、オブジェクトをロードして、値をタプルで読み取ります。
例としての python コードは次のとおりです。
from PIL import Image
from PIL import ImageGrab
import operator
#######################################
#scree resolution
width = 1920
height = 1080
step = 10
#######################################
def process(pix):
temp = (0, 0, 0)
count = 0
for i in range(0, width, step):
for j in range(0, height, step):
temp = tuple(map(operator.add, temp, pix[i,j]))
count += 1
return (int(temp[0]/count), int(temp[1]/count), int(temp[2]/count))
while True:
img=ImageGrab.grab()
pix = img.load()
res = process(pix)
print(res)
ただし、このコードは Windows でのみ機能します (imageGrab のため)...