概要
webサイトやアプリケーションを見ていて、「この色を自分で再現したい!!」と思うことも多いのではないでしょうか。
しかし画面上のRGB値を取得するためによく言われるやり方は
画面をスクショ ⇒ ペイントにペースト ⇒ スポイト
とかなりめんどくさいです。フリーソフト入れるのも面倒だし・・・
そこで今回は、Windows APIをpythonから扱うためのpywin32を利用して、手っ取り早くカーソル上のRGB値を取得するスクリプトを作成しました。
##pywin32のインストール
pip install pywin32
以下のモジュールをimportします。
import win32gui
import win32api
DPIの設定
import ctypes
user32 = ctypes.windll.user32
user32.SetProcessDPIAware()
また、ctypesのSetProcessDPIAware
関数を利用することで、現在のDPI、つまり実際にデスクトップディスプレイ上で表現されているピクセル数を考慮した座標を取得することができます.
カーソル位置の取得 & RGB値の取得
# デスクトップウィンドウの取得
desktop = win32gui.GetDesktopWindow()
document = win32gui.GetDC(desktop)
def getCursorPixel(document):
# カーソル位置の取得
cursor_pos = win32api.GetCursorPos()
# 指定したPixelのRGB値の取得
pixel_color = win32gui.GetPixel(
document, cursor_pos[0], cursor_pos[1]
)
# 10進数表記のRGB値に変換
rgb = [pixel_color >> 8*i & 0xff for i in range(3)]
print("RGB({0},{1},{2})".format(*rgb))
動作
このやり方だと、
- コンソールを開いておく
- RGB値の欲しい位置にカーソルを持っていく
- Alt + Tabでコンソールにフォーカスを移す
- 実行
という手順を踏む必要があります。
ひょっとするとwin32apiを利用してクリックのイベントハンドラーを追加したりできれば、もっとGUIによる直感的な操作ができるかもしれません。
また、hoverに対してデザインが変わる仕様になっていたりする場合は、GetPixelに座標だけ渡してあげるなど、適宜対応してあげる必要があるでしょう.