#include #include struct Image* create_image(size_t width, size_t height) { struct Image* ip = (struct Image*)malloc(sizeof(struct 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; } struct ImageMask* create_image_mask(size_t width, size_t height) { struct ImageMask* ip = (struct ImageMask*)malloc(sizeof(struct ImageMask)); ip->width = width; ip->height = height; ip->mask = (ImageMaskData_t**)malloc(sizeof(ImageMaskData_t*) * ip->height); ImageMaskData_t* image_data = calloc(width*height, sizeof(ImageMaskData_t)); for (size_t y = 0; y < height; y++) { ip->mask[y] = &image_data[y*width]; } return ip; } void free_image(struct Image* image) { free(image->image[0]); free(image->image); free(image); } void free_image_mask(struct ImageMask* image_mask) { free(image_mask->mask[0]); free(image_mask->mask); free(image_mask); }