Solved

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

Posted on 2011-03-11
7
1,106 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
Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

 
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

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Delphi Form ownership 4 85
Dell Alienware Graphics Amplifier Driver for non-Alienware systems 18 249
Delphi inherited method 6 67
enhance the following code 3 30
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
More and more people are using the enhanced small form-factor pluggable (SFP+) tranceivers, and speed is of utmost importance. Testing of speeds are critical to ensure that the devices will meet the speed requirements. There are some testing challen…
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…

785 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