#896 closed Feature Request (Rejected)
CPU intencive yet simple and powerful addition to PixelSearch
Reported by: | ao0921@… | Owned by: | |
---|---|---|---|
Milestone: | Component: | AutoIt | |
Version: | Severity: | None | |
Keywords: | Cc: |
Description
Would help greatly because algorithm is VERY CPU intensive and is effectively useless using UDF.
That could search the for a pixel that is the closes to a given $X and $Y input withing a square.
PixelSearchCloseBy ( x, y, squareSize, color, [, shade-variation [, step [, hwnd]]] )
Basically a search starting from he x and y and checking for similar colors around expanding pixel by pixel in square with a side = squareSize.
Here what I came up with to the best of what i know about C++:
int PixelSearchCloseBy(int x, int y, int squareSize, int color){
int out[2]={-1,-1};
int left, right, top, bottom, xx;
HDC hdc = GetDC(HWND_DESKTOP);
for(int i=1; i < squareSize/2; i++){
left = x-i;
right = x+i;
top = y-i;
bottom= y+i;
for(xx=left;xx<right;xx++){check top side of the squre
}
for(xx=top;xx<bottom;xx++){check right side
if(GetPixel(hdc,right,xx)){out[0]=right;out[1]=xx;return out;}
}
for(xx=right;xx<left;xx--){bottom side
if(GetPixel(hdc,xx,bottom)){out[0]=xx;out[1]=bottom;return out;}
}
for(xx=bottom;xx<top;xx--){left side
if(GetPixel(hdc,left,xx)){out[0]=left;out[1]=xx;return out;}
}
}
}
whatever you can do - appreciated
Attachments (0)
Change History (3)
comment:1 Changed 16 years ago by Valik
- Resolution set to Rejected
- Status changed from new to closed
comment:2 follow-up: ↓ 3 Changed 16 years ago by ao0921@…
sorry, I'm new to this, i was thinking i did something wrong to the first one. So i guess this function is more then AutoIt is planned to do? Also your name isn't that Russian? (just curious)
comment:3 in reply to: ↑ 2 Changed 16 years ago by Valik
Replying to ao0921@…:
sorry, I'm new to this, i was thinking i did something wrong to the first one.
In the future when you think you've done something wrong the first try ask how to do it right (on the forum) before trying again. As it is, you didn't do anything wrong the first time. You should have added your code as a new comment to the first ticket. Creating a new, identical (mostly) ticket was wrong.
So i guess this function is more then AutoIt is planned to do?
Yes. It offers only a slight variation over the standard PixelSearch().
Also your name isn't that Russian? (just curious)
No.
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.
Is there some reason you had to post this as a second ticket? Couldn't you have just posted the code as a new comment in #895?
Further, while the code is logically sound it uses GetPixel() rendering it useless. I would not be surprised at all if you (or at least somebody) can't write something in AutoIt faster than that. GetPixel() is horrible for repeated operations because it involves a tremendous amount of overhead per call.
Since you know C++ I suggest you write a DLL (optionally make it a plugin DLL). The API is undocumented but it is still there and people on the forum do know how to write plugins. You just need to start asking the right questions in the right place which is something you haven't done so far.