マウスで押したところの色を取得する(カラーピッカー機能)

colorpicker.png

カラーピッカーみたいな機能はどのようにして得られるのだろうか?
やり方は何通りかある

  1. WinAPIのGetPixel()を使う
  2. OpenGLのglReadPixels()を使う

WinAPIの場合

HDC hdc = GetDC(NULL); // デスクトップ画面のデバイスコンテキスト取得
COLORREF aaa = GetPixel(hdc,x,y); // ←
std::cout << aaa << std::endl;
std::cout << "R:" << (int)GetRValue(aaa) << std::endl; // R
std::cout << "G:" << (int)GetGValue(aaa) << std::endl; // G
std::cout << "B:" << (int)GetBValue(aaa) << std::endl; // B
ReleaseDC(NULL, hdc); // 使い終わったらデバイスコンテキスト解放

OpenGLの場合

  unsigned char pixel[3];
    glReadPixels(mouse_x, mouse_y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
    std::cout << "R: " << (int)pixel[0] << std::endl;
    std::cout << "G: " << (int)pixel[1] << std::endl;
    std::cout << "B: " << (int)pixel[2] << std::endl;
    std::cout << std::endl;

呼ぶ場所によっては上下が逆になっちゃったりするから気をつけて!

関連ページ

AnttTweakBarで色の表示

PIL

from PIL import Image
im = Image.open("image.png")
color=im.getpixel((0,0))

サポートサイト Wikidot.com