add find every color code

This commit is contained in:
vcaesar 2021-01-26 12:59:47 -04:00
parent b1dd8732ff
commit 5bf71e637e

View File

@ -60,8 +60,7 @@ MMPoint find_bitmap(MMBitmapRef bitmap, MMBitmapRef sbit, float tolerance){
// printf("x=%d, y=%d, width=%d, height=%d\n", rect.origin.x, // printf("x=%d, y=%d, width=%d, height=%d\n", rect.origin.x,
// rect.origin.y, rect.size.width, rect.size.height); // rect.origin.y, rect.size.width, rect.size.height);
if (findBitmapInRect(bitmap, sbit, &point, if (findBitmapInRect(bitmap, sbit, &point, rect, tolerance) == 0) {
rect, tolerance) == 0) {
return point; return point;
} }
@ -69,19 +68,18 @@ MMPoint find_bitmap(MMBitmapRef bitmap, MMBitmapRef sbit, float tolerance){
} }
MMPoint *find_every_bitmap(MMBitmapRef bitmap, MMBitmapRef sbit, float tolerance, MMPoint *list){ MMPoint *find_every_bitmap(MMBitmapRef bitmap, MMBitmapRef sbit, float tolerance, MMPoint *list){
if (!bitmap_ready(bitmap) || !bitmap_ready(sbit)) return NULL; if (!bitmap_ready(bitmap) || !bitmap_ready(sbit)) { return NULL; }
MMPoint point; MMPoint point;
MMPointArrayRef pointArray; MMPointArrayRef pointArray;
MMRect rect = MMBitmapGetBounds(bitmap); MMRect rect = MMBitmapGetBounds(bitmap);
if (findBitmapInRect(bitmap, sbit, &point, if (findBitmapInRect(bitmap, sbit, &point, rect, tolerance) == 0) {
rect, tolerance) == 0) {
return NULL; return NULL;
} }
pointArray = findAllBitmapInRect(bitmap, sbit, rect, tolerance); pointArray = findAllBitmapInRect(bitmap, sbit, rect, tolerance);
if (pointArray == NULL) return NULL; if (pointArray == NULL) { return NULL; }
memcpy(list, pointArray->array, sizeof(MMPoint) * pointArray->count); memcpy(list, pointArray->array, sizeof(MMPoint) * pointArray->count);
destroyMMPointArray(pointArray); destroyMMPointArray(pointArray);
@ -93,7 +91,6 @@ int count_of_bitmap(MMBitmapRef bitmap, MMBitmapRef sbit, float tolerance){
if (!bitmap_ready(bitmap) || !bitmap_ready(sbit)) return 0; if (!bitmap_ready(bitmap) || !bitmap_ready(sbit)) return 0;
MMRect rect = MMBitmapGetBounds(bitmap); MMRect rect = MMBitmapGetBounds(bitmap);
return countOfBitmapInRect(bitmap, sbit, rect, tolerance); return countOfBitmapInRect(bitmap, sbit, rect, tolerance);
} }
@ -126,9 +123,8 @@ MMBitmapRef bitmap_from_string(const char *str){
MMBitmapRef bitmap; MMBitmapRef bitmap;
MMBMPStringError err; MMBMPStringError err;
if ((bitmap = createMMBitmapFromString( if ((bitmap = createMMBitmapFromString((unsigned char*)str, len, &err ))
(unsigned char*)str, len, &err ) == NULL) {
) == NULL) {
return NULL; return NULL;
} }
@ -148,7 +144,6 @@ char *tostring_bitmap(MMBitmapRef bitmap){
MMBMPStringError err; MMBMPStringError err;
buf = (char *)createStringFromMMBitmap(bitmap, &err); buf = (char *)createStringFromMMBitmap(bitmap, &err);
return buf; return buf;
} }
@ -174,7 +169,7 @@ MMBitmapRef get_portion(MMBitmapRef bit_map, MMRect rect){
} }
MMRGBHex bitmap_get_color(MMBitmapRef bitmap, size_t x, size_t y){ MMRGBHex bitmap_get_color(MMBitmapRef bitmap, size_t x, size_t y){
if (!bitmap_ready(bitmap)) return 0; if (!bitmap_ready(bitmap)) { return 0; }
MMPoint point; MMPoint point;
point = MMPointMake(x, y); point = MMPointMake(x, y);
@ -197,6 +192,21 @@ MMPoint bitmap_find_color(MMBitmapRef bitmap, MMRGBHex color, float tolerance){
return point; return point;
} }
MMPoint *bitmap_find_every_color(MMBitmapRef bitmap, MMRGBHex color, float tolerance, MMPoint *list){
if (!bitmap_ready(bitmap)) { return NULL; }
MMRect rect = MMBitmapGetBounds(bitmap);
MMPointArrayRef pointArray;
pointArray = findAllColorInRect(bitmap, color, rect, tolerance);
if (pointArray == NULL) { return NULL; }
memcpy(list, pointArray->array, sizeof(MMPoint) * pointArray->count);
destroyMMPointArray(pointArray);
if (list == NULL) { return NULL; }
return list;
}
int bitmap_count_of_color(MMBitmapRef bitmap, MMRGBHex color, float tolerance){ int bitmap_count_of_color(MMBitmapRef bitmap, MMRGBHex color, float tolerance){
if (!bitmap_ready(bitmap)) return 0; if (!bitmap_ready(bitmap)) return 0;
MMRect rect = MMBitmapGetBounds(bitmap); MMRect rect = MMBitmapGetBounds(bitmap);