diff --git a/bitmap/goBitmap.h b/bitmap/goBitmap.h index 5597e1a..a728de4 100644 --- a/bitmap/goBitmap.h +++ b/bitmap/goBitmap.h @@ -77,6 +77,27 @@ MMPoint bitmap_find_bitmap(MMBitmapRef bitmap, MMBitmapRef sbitmap, float tolera return point; } +MMPoint *find_every_bitmap(MMBitmapRef bitmap, MMBitmapRef sbitmap, float tolerance, MMPoint *list){ + if (!bitmap_ready(bitmap) || !bitmap_ready(sbitmap)) return NULL; + + MMPoint point; + MMPointArrayRef pointArray; + MMRect rect = MMBitmapGetBounds(bitmap); + + if (findBitmapInRect(bitmap, sbitmap, &point, + rect, tolerance) == 0) { + return NULL; + } + + pointArray = findAllBitmapInRect(bitmap, sbitmap, rect, tolerance); + if (pointArray == NULL) return NULL; + + memcpy(list, pointArray->array, sizeof(MMPoint) * pointArray->count); + destroyMMPointArray(pointArray); + + return list; +} + MMPoint aFindBitmap(MMBitmapRef bit_map, MMRect rect){ // MMRect rect; // rect.size.width = 10; diff --git a/robotgo.go b/robotgo.go index 3bbde2a..9a95095 100644 --- a/robotgo.go +++ b/robotgo.go @@ -55,7 +55,7 @@ import ( ) const ( - version string = "v0.46.0.401, Pyrenees Mountains!" + version string = "v0.46.0.402, Pyrenees Mountains!" ) // GetVersion get version @@ -597,6 +597,46 @@ func FindBitmap(args ...interface{}) (int, int) { return int(pos.x), int(pos.y) } +// FindEveryBitmap find the every bitmap +func FindEveryBitmap(args ...interface{}) (int, int) { + var ( + bit C.MMBitmapRef + sbit C.MMBitmapRef + tolerance C.float + lpos C.MMPoint + ) + + 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 + } + + if len(args) > 3 { + lpos.x = C.size_t(args[3].(int)) + lpos.y = 0 + } else { + lpos.x = 0 + lpos.y = 0 + } + + if len(args) > 4 { + lpos.x = C.size_t(args[3].(int)) + lpos.y = C.size_t(args[4].(int)) + } + + pos := C.find_every_bitmap(bit, sbit, tolerance, &lpos) + // fmt.Println("pos----", pos) + return int(pos.x), int(pos.y) +} + // FindBit find the bitmap func FindBit(args ...interface{}) (int, int) { var bit C.MMBitmapRef