Get pixel color at any point

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Get pixel color at any point

Post by RASHAD »

It should be cross platform please check

- Run the snippet
- Press Print Screen key
- Press Return key
- Move the mouse to the desired point and Click Left
- Press Return key again to finish

Have fun and feel free to modify

Code: Select all

UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()

ExamineDesktops()

OpenWindow(0,0,0,200,50,"Test",#PB_Window_BorderLess| #PB_Window_ScreenCentered)
ImageGadget(0,0,0,50,50,0)
DisableGadget(0,1)
AddKeyboardShortcut(0,#PB_Shortcut_Return,10)
Repeat
           
  Select WaitWindowEvent()
      
      Case #PB_Event_CloseWindow
            Quit = 1
      
      Case #PB_Event_LeftClick
          If IsImage(0)
           StartDrawing(ImageOutput(0)) 
             Debug Point(DesktopMouseX(),DesktopMouseY())
           StopDrawing()
          EndIf
      
      Case #PB_Event_Menu
          Select EventMenu()
           Case 10
              Run ! 1
              If Run = 1
                 ResizeWindow(0,0,0,DesktopWidth(0),DesktopHeight(0))
                 ResizeGadget(0,0,0,DesktopWidth(0),DesktopHeight(0))             
                 GetClipboardImage(0)
                 If IsImage(0)
                    SetGadgetState(0,ImageID(0))
                 Else
                    Debug "No Image"
                 EndIf
              Else 
                 ResizeWindow(0,0,0,200,50)
                 ResizeGadget(0,0,0,200,50)
              EndIf            
          EndSelect
      
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 1            
          EndSelect          

  EndSelect 

Until Quit = 1
End
Egypt my love
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Get pixel color at any point

Post by RASHAD »

1 - Run the snippet
2 - Press Print Screen Key
3 - Click Left Mouse Button inside the circle at bottom left
4 - Move the mouse to your point then press Left Mouse Button again

Repeat 3 & 4 as you like

5 - Press Escape to Quit

Code: Select all

UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()

ExamineDesktops()

CreateImage(1,50,50,24,$E8FEFE)
StartDrawing(ImageOutput(1))
 DrawingMode(#PB_2DDrawing_Outlined)
 Box(2,2,46,46,$FE281B)
 Circle(25,25,20,$1A1DFE)
StopDrawing()

OpenWindow(0,DesktopWidth(0)-50,DesktopHeight(0)-100,50,50,"Test",#PB_Window_BorderLess)
ImageGadget(0,0,0,50,50,ImageID(1))
AddKeyboardShortcut(0,#PB_Shortcut_Escape,10)
Repeat           
  Select WaitWindowEvent()
            
      Case #PB_Event_Menu
          Select EventMenu()
            Case 10
              Quit = 1
          EndSelect      
     
      Case #PB_Event_Gadget
          Select EventGadget()
            Case 0
              Select EventType()
                Case #PB_EventType_LeftClick
                  run ! 1
                  If run =1
                    ResizeWindow(0,0,0,DesktopWidth(0),DesktopHeight(0))
                    ResizeGadget(0,0,0,DesktopWidth(0),DesktopHeight(0))             
                    GetClipboardImage(0)
                    If IsImage(0)
                      SetGadgetState(0,ImageID(0))
                    Else
                        Debug "No Image"
                    EndIf            
                 Else
                    If IsImage(0)
                    StartDrawing(ImageOutput(0))
                      Debug Point(DesktopMouseX(),DesktopMouseY())
                    StopDrawing()
                     ResizeWindow(0,DesktopWidth(0)-50,DesktopHeight(0)-100,50,50)
                     ResizeGadget(0,0,0,50,50)
                     SetGadgetState(0,ImageID(1))
                    EndIf             
                 EndIf              
                EndSelect
          EndSelect
  EndSelect 

Until Quit = 1
End
Egypt my love
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
Joined: Sun Apr 12, 2009 6:27 am

Re: Get pixel color at any point

Post by RASHAD »

Added some features
- Right Mouse Button Down to move the palette to a new position
- Better performance

Tested with Windows XP,7,8.1 & 10

Code: Select all

UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()

ExamineDesktops()

CreateImage(1,50,50,24,$0)
StartDrawing(ImageOutput(1))
 DrawingMode(#PB_2DDrawing_Outlined)
 Box(2,2,46,46,$FFFFFF)
 Circle(25,25,20,$1A1DFE)
 LineXY(5,25,45,25,$1A1DFE)
 LineXY(25,5,25,45,$1A1DFE)
StopDrawing()

x = DesktopWidth(0)-55
y = DesktopHeight(0)-100

OpenWindow(0,DesktopWidth(0)-55,DesktopHeight(0)-100,50,50,"",#PB_Window_BorderLess)
StickyWindow(0,1)
CanvasGadget(0,0,0,50,50)
SetGadgetAttribute(0,#PB_Canvas_Image ,ImageID(1))
AddKeyboardShortcut(0,#PB_Shortcut_Escape,10)
ClearClipboard()
Repeat           
  Select WaitWindowEvent()              
      Case #PB_Event_Menu
          Select EventMenu()
            Case 10
              Quit = 1
          EndSelect            
     
      Case #PB_Event_Gadget
          Select EventGadget()
            Case 0
              Select EventType()
                Case #PB_EventType_LeftClick
                    run ! 1
                    If run = 1
                      GetClipboardImage(0)
                      If IsImage(0)
                        ResizeWindow(0,0,0,DesktopWidth(0),DesktopHeight(0))
                        ResizeGadget(0,0,0,DesktopWidth(0),DesktopHeight(0))             
                        SetGadgetAttribute(0,#PB_Canvas_Image ,ImageID(0))
                      Else
                        run = 0
                        ResizeWindow(0,x,y,50,50)
                        ResizeGadget(0,0,0,50,50)
                        MessageRequester("Error","Press Print Screen key first",#PB_MessageRequester_Ok|#MB_ICONERROR)
                      EndIf            
                    Else
                      If IsImage(0)
                      StartDrawing(ImageOutput(0))
                        color = Point(DesktopMouseX(),DesktopMouseY())
                      StopDrawing()
                       MessageRequester("Info","$"+Hex(color,#PB_Long)+#CRLF$+ "RGB("+Str(Red(color)) + ","+ Str(Green(color))+","+ Str(Blue(color))+")", #PB_MessageRequester_Ok|#MB_ICONINFORMATION)
                       ResizeWindow(0,x,y,50,50)
                       ResizeGadget(0,0,0,50,50)
                       SetGadgetAttribute(0,#PB_Canvas_Image ,ImageID(1))
                      EndIf             
                    EndIf          
              
                Case #PB_EventType_RightButtonDown
                    Move = 1
                    
                Case #PB_EventType_MouseMove
                    If Move = 1                     
                      ResizeWindow(0,DesktopMouseX()-25,DesktopMouseY()-25,50,50)
                      ResizeGadget(0,0,0,50,50)
                    EndIf
                      
                Case #PB_EventType_RightButtonUp                
                    x = WindowX(0)
                    y = WindowY(0)        
                    Move = 0                          
                    ClearClipboard()
                  
              EndSelect
          EndSelect
  EndSelect 
Until Quit = 1
End
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5494
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Get pixel color at any point

Post by Kwai chang caine »

Hello RASHAD :D :wink:
Works great, thanks for sharing 8)
ImageThe happiness is a road...
Not a destination
Post Reply