mirror of
https://github.com/go-vgo/robotgo.git
synced 2025-05-31 06:13:55 +00:00
Update and fix bitmap
This commit is contained in:
parent
694a63fa66
commit
ca3c7a6c9b
@ -96,9 +96,12 @@ H_INLINE int MMRGBHexSimilarToColor(MMRGBHex h1, MMRGBHex h2, float tolerance)
|
||||
if (tolerance <= 0.0f) {
|
||||
return h1 == h2;
|
||||
} else {
|
||||
uint8_t d1 = RED_FROM_HEX(h1) - RED_FROM_HEX(h2);
|
||||
uint8_t d2 = GREEN_FROM_HEX(h1) - GREEN_FROM_HEX(h2);
|
||||
uint8_t d3 = BLUE_FROM_HEX(h1) - BLUE_FROM_HEX(h2);
|
||||
// uint8_t d1 = RED_FROM_HEX(h1) - RED_FROM_HEX(h2);
|
||||
// uint8_t d2 = GREEN_FROM_HEX(h1) - GREEN_FROM_HEX(h2);
|
||||
// uint8_t d3 = BLUE_FROM_HEX(h1) - BLUE_FROM_HEX(h2);
|
||||
int d1 = RED_FROM_HEX(h1) - RED_FROM_HEX(h2);
|
||||
int d2 = GREEN_FROM_HEX(h1) - GREEN_FROM_HEX(h2);
|
||||
int d3 = BLUE_FROM_HEX(h1) - BLUE_FROM_HEX(h2);
|
||||
return sqrt((double)(d1 * d1) +
|
||||
(d2 * d2) +
|
||||
(d3 * d3)) <= (tolerance * 442.0f);
|
||||
|
@ -86,8 +86,8 @@ static int findBitmapInRectAt(MMBitmapRef needle,
|
||||
while (pointOffset.x <= scanWidth) {
|
||||
/* Check offset in |haystack| for |needle|. */
|
||||
if (needleAtOffset(needle, haystack, pointOffset, tolerance)) {
|
||||
++pointOffset.x;
|
||||
++pointOffset.y;
|
||||
// ++pointOffset.x;
|
||||
// ++pointOffset.y;
|
||||
*point = pointOffset;
|
||||
return 0;
|
||||
}
|
||||
|
@ -58,6 +58,25 @@ MMBitmapRef bitmap_deepcopy(MMBitmapRef bitmap){
|
||||
return bitmap == NULL ? NULL : copyMMBitmap(bitmap);
|
||||
}
|
||||
|
||||
MMPoint bitmap_find_bitmap(MMBitmapRef bitmap, MMBitmapRef sbitmap, float tolerance){
|
||||
MMPoint point = {-1, -1};
|
||||
// printf("tolenrance=%f\n", tolerance);
|
||||
if (!bitmap_ready(sbitmap) || !bitmap_ready(bitmap)) {
|
||||
printf("bitmap is not ready yet!\n");
|
||||
return point;
|
||||
}
|
||||
|
||||
MMRect rect = MMBitmapGetBounds(sbitmap);
|
||||
// printf("x=%d,y=%d,width=%d,height=%d\n", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
|
||||
|
||||
if (findBitmapInRect(bitmap, sbitmap, &point,
|
||||
rect, tolerance) == 0) {
|
||||
return point;
|
||||
}
|
||||
|
||||
return point;
|
||||
}
|
||||
|
||||
MMPoint aFindBitmap(MMBitmapRef bit_map, MMRect rect){
|
||||
// MMRect rect;
|
||||
// rect.size.width = 10;
|
||||
@ -92,8 +111,6 @@ MMBitmapRef bitmap_open(char *path, uint16_t ttype){
|
||||
char *bitmap_save(MMBitmapRef bitmap, char *path, uint16_t type){
|
||||
if (saveMMBitmapToFile(bitmap, path, (MMImageType) type) != 0) {
|
||||
return "Could not save image to file.";
|
||||
}else{
|
||||
saveMMBitmapToFile(bitmap, path, (MMImageType) type);
|
||||
}
|
||||
//destroyMMBitmap(bitmap);
|
||||
return "ok";
|
||||
|
28
robotgo.go
28
robotgo.go
@ -55,7 +55,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
version string = "v0.45.0.371, Mount Qomolangma!"
|
||||
version string = "v0.45.0.374, Mount Qomolangma!"
|
||||
)
|
||||
|
||||
// GetVersion get version
|
||||
@ -571,6 +571,32 @@ func SetKeyboardDelay(x int) {
|
||||
|______/ |__| |__| |__| |__| /__/ \__\ | _|
|
||||
*/
|
||||
|
||||
// FindBit find the bitmap
|
||||
func FindBit(args ...interface{}) (int, int) {
|
||||
var (
|
||||
bit C.MMBitmapRef
|
||||
sbit C.MMBitmapRef
|
||||
tolerance C.float
|
||||
)
|
||||
|
||||
bit = args[0].(C.MMBitmapRef)
|
||||
if len(args) > 1 {
|
||||
sbit = args[1].(C.MMBitmapRef)
|
||||
} else {
|
||||
sbit = CaptureScreen()
|
||||
}
|
||||
|
||||
if len(args) > 2 {
|
||||
tolerance = C.float(args[2].(float32))
|
||||
} else {
|
||||
tolerance = 0.5
|
||||
}
|
||||
|
||||
pos := C.bitmap_find_bitmap(bit, sbit, tolerance)
|
||||
// fmt.Println("pos----", pos)
|
||||
return int(pos.x), int(pos.y)
|
||||
}
|
||||
|
||||
// FindBitmap find the bitmap
|
||||
func FindBitmap(args ...interface{}) (int, int) {
|
||||
var bit C.MMBitmapRef
|
||||
|
Loading…
Reference in New Issue
Block a user