Solved

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

Posted on 2011-03-11
7
1,133 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 83 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
Industry Leaders: 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 83 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 42 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

Independent Software Vendors: 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!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Firemonkey allowing RTL on android 6 56
Delphi, TImage, Png 2 17
Browsing a TTreeView in Delphi 5 31
IP without any Dots 1 49
System overheating may become a serious problem if not taken care of at the proper time. I am writing this article because I faced a similar problem. Intro All electronic devices produce heat, but computers are a special case - the processors bo…
Great sound, comfort and fit, excellent build quality, versatility, compatibility. These are just some of the many reasons for choosing a headset from Sennheiser.
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

680 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