2011-01-29 3 views
6

में पिक्सेल रंग प्राप्त करना मैं स्क्रीन पर विभिन्न एक्स, वाई निर्देशांक पर एक पिक्सेल के आरजीबी मान प्राप्त करना चाहता हूं। मैं इस बारे में सी ++ में कैसे जाऊं?सी ++

मैं अपना खुद का गाऊशियन ब्लर प्रभाव बनाने की कोशिश कर रहा हूं।

यह विंडोज में होगा 7.

संपादित

चलाने के लिए क्या पुस्तकालयों इस के लिए शामिल किया जाना चाहिए?

क्या मैं जा रहा है:

#include <iostream> 

using namespace std ; 

int main(){ 

    HDC dc = GetDC(NULL); 
    COLORREF color = GetPixel(dc, 0, 0); 
    ReleaseDC(NULL, dc); 

    cout << color; 

} 
+1

पर्याप्त जानकारी नहीं है। क्या आप समझा सकते हैं कि आप ऐसा क्यों करना चाहते हैं? इसके अलावा, यह निश्चित रूप से ओएस विशिष्ट है। –

+0

इसके बारे में क्षमा करें, मैंने और जानकारी जोड़ दी है। – rectangletangle

उत्तर

7

जैसा कि पिछले पोस्ट में बताया गया है, आप Win32 API से GetPixel फ़ंक्शन चाहते हैं।

GetPixel gdi32.dll के अंदर बैठता है, इसलिए यदि आपके पास उचित वातावरण सेटअप है, तो आपको windows.h (जिसमें wingdi.h शामिल है) शामिल करने में सक्षम होना चाहिए और आपको सुनहरा होना चाहिए।

यदि आपके पास किसी भी कारण से न्यूनतम वातावरण सेटअप है, तो आप सीधे लोडिंग लाइब्रेरी का उपयोग gdi32.dll पर भी कर सकते हैं।

GetPixel का पहला पैरामीटर डिवाइस संदर्भ के लिए एक हैंडल है, जिसे GetDC फ़ंक्शन को कॉल करके पुनर्प्राप्त किया जा सकता है (जो <windows.h> के माध्यम से भी उपलब्ध है)।

एक मूल उदाहरण जो डीएलएल से गेट पिक्सेल लोड करता है और जहां भी आपका कर्सर है, पिक्सेल के रंग को प्रिंट करता है।

#include<windows.h> 
#include<stdio.h> 

int main(int argc, char** argv) 
{ 
    FARPROC pGetPixel; 

    HINSTANCE _hGDI = LoadLibrary("gdi32.dll"); 
    if(_hGDI) 
    { 
     pGetPixel = GetProcAddress(_hGDI, "GetPixel"); 
     HDC _hdc = GetDC(NULL); 
     if(_hdc) 
     { 
      POINT _cursor; 
      GetCursorPos(&_cursor); 
      COLORREF _color = (*pGetPixel) (_hdc, _cursor.x, _cursor.y); 
      int _red = GetRValue(_color); 
      int _green = GetGValue(_color); 
      int _blue = GetBValue(_color); 

      printf("Red: 0x%02x\n", _red); 
      printf("Green: 0x%02x\n", _green); 
      printf("Blue: 0x%02x\n", _blue); 
     } 
     FreeLibrary(_hGDI); 
    } 
    return 0; 
} 
+0

ध्यान दें कि यदि आप कुछ पिक्सेल 'GetPixel' से अधिक के लिए ऐसा करना चाहते हैं तो कुत्ता धीमा है। एक तेज़ तरीका एक संगत डीसी बनाना है, इसमें एक डिब्बेक्शन बनाएं और चुनें और फिर सीधे उस मेमोरी तक पहुंचें जो उसके पिक्सेल का बैक अप लेता है। –

12

आप NULL खिड़की पर GetDC का उपयोग पूरे स्क्रीन के लिए एक उपकरण संदर्भ प्राप्त करने के लिए कर सकते हैं, और कहा कि अनुसरण कर सकते हैं GetPixel के लिए एक कॉल के साथ:

HDC dc = GetDC(NULL); 
COLORREF color = GetPixel(dc, x, y); 
ReleaseDC(NULL, dc); 

बेशक, आप दक्षता के लिए सभी पिक्सेल-रीडिंग करते समय केवल एक बार डिवाइस संदर्भ प्राप्त करना और रिलीज़ करना चाहते हैं।

+0

@ एंटेटर 7171- यदि आप 'शामिल करते हैं तो यह पर्याप्त होना चाहिए, बशर्ते कि आप विजुअल स्टूडियो से बना रहे हों। मैंने इस चाल का इस्तेमाल कई सालों पहले इस से कुछ विशेष किए बिना किया था। – templatetypedef

+0

@ Anteater7171- क्षमा करें, मुझे उस कंपाइलर के बारे में कुछ नहीं पता है, और आप बहुत मदद नहीं कर सकते हैं। आप शायद कुछ सिस्टम डीएलएल फाइलों जैसे 'gdi32.lib' में लिंक करना चाहते हैं, और यह एमएसडीएन पर देखने लायक हो सकता है कि कौन सी विशिष्ट पुस्तकालयों की आवश्यकता है। – templatetypedef