#include #include Image* create_image(size_t width, size_t height) { Image* ip = (Image*)malloc(sizeof(Image)); ip->width = width; ip->height = height; ip->image = (ImageData_t**)malloc(sizeof(ImageData_t*) * ip->height); ImageData_t* image_data = calloc(width*height, sizeof(ImageData_t)); for (size_t y = 0; y < height; y++) { ip->image[y] = &image_data[y*width]; } return ip; } ImageMask* create_image_mask(size_t width, size_t height) { ImageMask* ip = (ImageMask*)malloc(sizeof(ImageMask)); ip->width = width; ip->height = height; ip->image = (MaskData_t**)malloc(sizeof(MaskData_t*) * ip->height); MaskData_t* image_data = calloc(width*height, sizeof(MaskData_t)); for (size_t y = 0; y < height; y++) { ip->image[y] = &image_data[y*width]; } return ip; } void free_image(Image* image) { if (image->image[0] != NULL) { free(image->image[0]); image->image[0] = NULL; } if (image->image != NULL) { free(image->image); image->image = NULL; } if (image != NULL) { free(image); } } void free_image_mask(ImageMask* image_mask) { if (image_mask->image[0] != NULL) { free(image_mask->image[0]); image_mask->image[0] = NULL; } if (image_mask->image != NULL) { free(image_mask->image); image_mask->image = NULL; } if (image_mask != NULL) { free(image_mask); } }