Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Getting a pixel's colour

Posted on 2000-02-14
15
Medium Priority
?
255 Views
Last Modified: 2010-05-02
How can I get a pixel's colour in a picture? I have tried to use: picture1.point(x,y), but it seems only to work when my form has the focus.
Is there a way to store the image in a variable and then call a point-like function to get the colour, e.g. using an API-Call?
0
Comment
Question by:Beginner2104
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 5
  • 2
  • +1
15 Comments
 
LVL 9

Expert Comment

by:Ruchi
ID: 2520078
Try this one...

Private Sub Form_Load()
Picture1.MousePointer = vbCrosshair
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Caption = Hex$(Picture1.Point(X, Y))
End Sub
0
 

Author Comment

by:Beginner2104
ID: 2520143
That works... but I can not let the user do it. It must be the program it self and when I try to do that it does not really work using the PictureBox.
0
 
LVL 9

Expert Comment

by:Ruchi
ID: 2520182
Can you explain me more about your problem?
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 32

Expert Comment

by:Erick37
ID: 2520827
The problem is that if the form that contains the PictureBox is minimized or covered by another window, the Point method returns -1.  This is also true for the GetPixel() API.
0
 

Author Comment

by:Beginner2104
ID: 2521407
Adjusted points to 70
0
 

Author Comment

by:Beginner2104
ID: 2521408
More about my problem:
1. I capture the screen and places the image in a PictureBox or a variable (If posible)
2. I want to identify certain pixels, see if they are black or white.
It has to be a fast method too.
0
 
LVL 4

Expert Comment

by:nutwiss
ID: 2521868
Erick:

Is this also true for an off-screen DC? (if not, surely this would be a solution?)
0
 
LVL 4

Accepted Solution

by:
nutwiss earned 210 total points
ID: 2521877
nope... :)


Use a Picturebox with

autoredraw = true
visible = false

to hold the image - point(x,y) should now work
0
 
LVL 4

Expert Comment

by:nutwiss
ID: 2521893
As far as speed goes, try this:


Results:

Point:    5.0 seconds
GetPixel: 1.8 seconds


'#####################################
Option Explicit

Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Private Sub Command1_Click()
Dim t As Double
Dim c As Long
Dim x As Long
t = Timer
For x = 1 To 100000
    c = Picture1.Point(10, 10)
Next
MsgBox Timer - t
End Sub

Private Sub Command2_Click()
Dim t As Double
Dim c As Long
Dim mydc As Long
Dim x As Long
mydc = Picture1.hdc
t = Timer
For x = 1 To 100000
    c = GetPixel(mydc, 10, 10)
Next
MsgBox Timer - t
End Sub
'##################################
0
 

Author Comment

by:Beginner2104
ID: 2522127
Point works using autoredraw=true,visible=false but I just get -1 from Getpixel(). Is there a way to get it working?
0
 
LVL 4

Expert Comment

by:nutwiss
ID: 2522861
in the code above, have you checked the value of 'c' in the command2_click sub?

I get the same as the point() result ((=/=-1) ....

I'm using NT4 SP3, but this shouldn't make a difference (I don't think - I haven't got my API reference with me today)
0
 

Author Comment

by:Beginner2104
ID: 2524386
I have checked the values... e.g. when I get 0 (black) from Point, I get 14... from GetPixel. Picture1.autoredraw=true Picture1.visible=false
0
 
LVL 32

Expert Comment

by:Erick37
ID: 2524484
Make sure that you are referencing the same point.  GetPixel() uses pixel coordinates, Point uses the scalemode of the PictureBox.  Set the Scalemode of the picturebox to 3, pixels, and try again.
0
 

Author Comment

by:Beginner2104
ID: 2524530
Thank you both nutwiss and Erick37!! I forgot the last one about scalemode. Now it all works fine!! I'll make a question with some points for your last comment Erick37... what about making it posible to share the points among several answers?
0
 
LVL 4

Expert Comment

by:nutwiss
ID: 2526354
Beginner: If you're doing anything graphical, it should be a matter of course that you set scalemode to 3 - it makes life so much easier...
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Suggested Courses

604 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question