?
Solved

Does anyone know how to do a fast Delphi Getpixel anywhere on the screen?

Posted on 2011-03-11
7
Medium Priority
?
1,275 Views
Last Modified: 2013-11-22
I am busy doing some delphi coding. I am doing a block getpixel (about 50x50 pixels). It is really slow and I need to speed up the process. I am running Windows 7 64 Bit ultimate but in my mind it is currently way slower than it should be. Could someone please help?
0
Comment
Question by:cr38
7 Comments
 
LVL 7

Expert Comment

by:ebob42
ID: 35106794
Check out the ScanLine function

See http://edn.embarcadero.com/article/29173
0
 
LVL 13

Accepted Solution

by:
ThievingSix earned 332 total points
ID: 35110516
I'm not sure how much faster this will be than getting the screenshot then using scanlines but you can try

http://www.swissdelphicenter.ch/torry/showcode.php?id=259

Specifically -

procedure ScreenShot(x: Integer;  y: Integer; Width: Integer; Height: Integer;  bm: TBitMap);
0
 

Author Comment

by:cr38
ID: 35112455
Thanks guys...but "ThievingSix" I have a question...If I screenshot the pixel I assume I set the width and height to 1 in that procedure and x and y are the co-ordinates. But now it puts the information in the TBitMap handle. Is that the same as TColor because I called a single pixel? Sorry a bit of a noob at this...
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 13

Assisted Solution

by:ThievingSix
ThievingSix earned 332 total points
ID: 35112538
Ah, I thought you wanted to get 50x50 block of pixels. You can set the width and height to 50 and the x, and y to the required spots.

You can then do your pixel search with either scanlines or with x/y values in the smaller blcok you made from the first step.
0
 

Author Comment

by:cr38
ID: 35114311
Here is my code and its breaking...

Function IsButton : Boolean;

Var
 LoopX,LoopY : Integer;
 TotalColour,MyColour : Real;
 Counter : Integer;
 ImageCanvas : TCanvas;
 CheckResult : Boolean;
 Image1 : TBitMap;
 Flag : DWord;

Begin
 CheckResult :=False;
 TotalColour:=0;
 Counter :=0;


 ScreenShot(580,540,11,11,Image1);
 For LoopX := 0 To 10 Do
  For LoopY := 0 To 10 Do
  Begin
   MyColour:=(GetRValue(Image1.Canvas.Pixels[LoopX,LoopY])*65536) +(GetGValue(Image1.Canvas.Pixels[LoopX,LoopY])*256)+GetBValue(Image1.Canvas.Pixels[LoopX,LoopY]);
   TotalColour :=TotalColour + MyColour;
   Counter:=Counter+1;
  End;
 If Round(TotalColour / Counter) = 9979744 Then
 Begin
  CheckResult := True;
 End;
 MsgBox(FloatToStr(TotalColour/Counter),'Awesome',Flag);
 IsButton:=CheckResult;
End;
0
 

Author Comment

by:cr38
ID: 35114431
Nevermind! I was being dumb and not initialising the image... neede the line Image1 := TBitMap.Create;

Thanks for your help everyone!
0
 
LVL 2

Assisted Solution

by:RezaSadigh
RezaSadigh earned 168 total points
ID: 35114444
Hi my friend,
As you mentioned, Using Canvas.Pixels is too slow. I recommend that use
1- Graphic32: http://www.graphics32.org
or
2-ImageEN: http://www.hicomponents.com/
both of them are free.
Best regards
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
On September 18, Experts Exchange launched the first installment of the Help Bell, a new feature for Premium Members, Team Accounts, and Qualified Experts. The Help Bell will serve as an additional tool to help teams increase question visibility.
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an anti-spam), the admin…
Loops Section Overview
Suggested Courses
Course of the Month17 days, 3 hours left to enroll

862 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