diff --git a/base/rgb.h b/base/rgb.h index c4269e3..db0e3f7 100644 --- a/base/rgb.h +++ b/base/rgb.h @@ -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); diff --git a/bitmap/bitmap_find_c.h b/bitmap/bitmap_find_c.h index 01d91bd..1df90f6 100644 --- a/bitmap/bitmap_find_c.h +++ b/bitmap/bitmap_find_c.h @@ -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; } diff --git a/bitmap/goBitmap.h b/bitmap/goBitmap.h index dc6911a..4e682b0 100644 --- a/bitmap/goBitmap.h +++ b/bitmap/goBitmap.h @@ -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"; diff --git a/robotgo.go b/robotgo.go index 0f2de64..5ae29c9 100644 --- a/robotgo.go +++ b/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