From c970da3f5830fae5b4d98dcdcc8d34d678ec0434 Mon Sep 17 00:00:00 2001 From: pacien Date: Thu, 28 Dec 2017 01:22:03 +0100 Subject: Refactor canvas Signed-off-by: pacien --- include/painter/canvas.h | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 include/painter/canvas.h (limited to 'include/painter') diff --git a/include/painter/canvas.h b/include/painter/canvas.h new file mode 100644 index 0000000..e354938 --- /dev/null +++ b/include/painter/canvas.h @@ -0,0 +1,76 @@ +#ifndef UPEM_MORPHING_CANVAS +#define UPEM_MORPHING_CANVAS + +/** + * File: canvas.h + * "Everyday is a good day when you paint" – Bob Ross + */ + +#include +#include "common/geom.h" +#include "painter/color.h" + +/** + * Type: Canvas + * Represents a fixed size RGBa pixel matrix. + */ +typedef struct { + MLV_Image *mlv; +} Canvas; + +/** + * Function: canvas_create + * Initialises a canvas of the given size + * + * Parameters: + * width - the width in pixels + * height - the height in pixels + */ +Canvas *canvas_create(IntVector width, IntVector height); + +/** + * Function: canvas_destroy + * Frees all memory allocated to a canvas. + * + * Parameters: + * *c - the canvas to destroy + */ +void canvas_destroy(Canvas *c); + +/** + * Function: canvas_set_pixel + * Sets the pixel colour at the given coordinates. + * + * Parameters: + * *c - the canvas to alter + * pos - the coordinate of the pixel to set + * color - the new colour to set + */ +void canvas_set_pixel(Canvas *c, CartesianVector pos, Color color); + +/** + * Function: canvas_get_pixel + * Returns the colour of the pixel at the given position. + * + * Parameters: + * *c - the base canvas + * pos - the coordinate of the pixel to get + * + * Returns: + * The colour of the requested pixel + */ +Color canvas_get_pixel(Canvas *c, CartesianVector pos); + +/** + * Function: canvas_get_dim + * Returns the size (in pixels) of the given canvas. + * + * Parameters: + * *c - the canvas + * + * Returns: + * The size of the canvas + */ +CartesianVector canvas_get_dim(Canvas *c); + +#endif -- cgit v1.2.3 From 190449ee18bec69b2e385dccd9bd42ddc83dd418 Mon Sep 17 00:00:00 2001 From: pacien Date: Thu, 28 Dec 2017 01:22:41 +0100 Subject: Refactor and test color Signed-off-by: pacien --- include/painter/color.h | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 include/painter/color.h (limited to 'include/painter') diff --git a/include/painter/color.h b/include/painter/color.h new file mode 100644 index 0000000..2aeee3e --- /dev/null +++ b/include/painter/color.h @@ -0,0 +1,61 @@ +#ifndef UPEM_MORPHING_COLOR +#define UPEM_MORPHING_COLOR + +/** + * File: color.h + * + * See also: + * A rainbow + */ + +#include +#include +#include "common/time.h" + +/** + * Type: ColorComponent + * Represents a single colour component of 32-bits RGBa tuple. + */ +typedef uint8_t ColorComponent; + +/** + * Type: ColorPixel + * Represents a single RGBa coloured pixel. + * Compatible with the libMLV representation. + */ +typedef union { + struct { + ColorComponent a, b, g, r; + } rgba; + + MLV_Color mlv; +} Color; + +/** + * Function: color_equals + * Compares the supplied colors. + * + * Parameters: + * c1 - the first color + * c2 - the second color + * + * Returns: + * T(c1 is the same color as c2) + */ +bool color_equals(Color c1, Color c2); + +/** + * Function: color_blend + * Blends two colors. + * + * Parameters: + * origin - the first color + * target - the second color + * distance - the distance from the first color + * + * Returns: + * The blended color + */ +Color color_blend(Color origin, Color target, TimeVector distance); + +#endif -- cgit v1.2.3 From 330fd85db8c89c178621d978929d911bbe93fec7 Mon Sep 17 00:00:00 2001 From: pacien Date: Thu, 28 Dec 2017 01:23:08 +0100 Subject: Refactor canvas blender into rasterizer Signed-off-by: pacien --- include/painter/rasterizer.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 include/painter/rasterizer.h (limited to 'include/painter') diff --git a/include/painter/rasterizer.h b/include/painter/rasterizer.h new file mode 100644 index 0000000..204d616 --- /dev/null +++ b/include/painter/rasterizer.h @@ -0,0 +1,41 @@ +#ifndef UPEM_MORPHING_RASTERIZER +#define UPEM_MORPHING_RASTERIZER + +/** + * File: rasterizer.h + */ + +#include "painter/canvas.h" +#include "morpher/morphing.h" + +/** + * Struct: RasterizationContext + */ +typedef struct { + Canvas *result, *source, *target; + TimeVector frame; +} RasterizationContext; + +/** + * Struct: TriangleContext + */ +typedef struct { + Triangle current, source, target; +} TriangleContext; + +/** + * Function: rasterize + * Rasterises a morphing from a source and a target image at the given time frame. + * + * Parameters: + * *source - source image canvas + * *target - target image canvas + * *m - reference morphing + * frame - time frame + * + * Returns: + * The drawn canvas, dynamically allocated + */ +Canvas *rasterize(Canvas *source, Canvas *target, Morphing *m, TimeVector frame); + +#endif -- cgit v1.2.3 From fa154af5a72964931bae432dbb96abf45465e6cb Mon Sep 17 00:00:00 2001 From: pacien Date: Thu, 28 Dec 2017 01:37:38 +0100 Subject: Add canvas from image init. func. Signed-off-by: pacien --- include/painter/canvas.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'include/painter') diff --git a/include/painter/canvas.h b/include/painter/canvas.h index e354938..ba6d4da 100644 --- a/include/painter/canvas.h +++ b/include/painter/canvas.h @@ -25,9 +25,24 @@ typedef struct { * Parameters: * width - the width in pixels * height - the height in pixels + * + * Returns: + * The initialised canvas */ Canvas *canvas_create(IntVector width, IntVector height); +/** + * Function: canvas_create_from_image + * Initialises a canvas with an image loaded from the given path. + * + * Parameters: + * *fpath - path to the base image file + * + * Returns: + * The initialised canvas + */ +Canvas *canvas_create_from_image(const char *fpath); + /** * Function: canvas_destroy * Frees all memory allocated to a canvas. -- cgit v1.2.3 From ca8d91787e297b69d3d34a136b60df19b207a4f4 Mon Sep 17 00:00:00 2001 From: pacien Date: Thu, 28 Dec 2017 01:52:09 +0100 Subject: Adding inspiration Signed-off-by: pacien --- include/painter/canvas.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'include/painter') diff --git a/include/painter/canvas.h b/include/painter/canvas.h index ba6d4da..928121a 100644 --- a/include/painter/canvas.h +++ b/include/painter/canvas.h @@ -3,7 +3,8 @@ /** * File: canvas.h - * "Everyday is a good day when you paint" – Bob Ross + * > Everyday is a good day when you paint. + * -- Bob Ross */ #include -- cgit v1.2.3