aboutsummaryrefslogtreecommitdiff
path: root/lib/data/image_types.c
blob: f96b63178a8c002a11bfb0219e6da51f6f8c79f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <lib/data/image_types.h>
#include <stdlib.h>

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);
}