diff --git a/include/image/transformations.h b/include/image/transformations.h index 8cf5220..0971ccb 100644 --- a/include/image/transformations.h +++ b/include/image/transformations.h @@ -3,12 +3,40 @@ #include "utils.h" +/** + * @brief Flips image on X-Axis + * @details Creates a new buffer to move pixels to and flips pixels on X-Axis, + * freeing the old buffer at the end. + * @param[in] buf Pointer to original pixel buffer, later freed. + * @param[in] img Loaded PPM image for calculations + * @return unsigned int Pointer to new pixel buffer + * @retval NULL If original buffer is invalid or if new buffer fails to create + * */ unsigned int* ppm_flip_h(const unsigned int* buf, const PPM img); +/** + * @brief Flips image on Y-Axis + * @details Creates a new buffer to move pixels to and flips pixels on Y-Axis, + * freeing the old buffer at the end. + * @param[in] buf Pointer to original pixel buffer, later freed. + * @param[in] img Loaded PPM image for calculations + * @return unsigned int Pointer to new pixel buffer + * @retval NULL If original buffer is invalid or if new buffer fails to create + * */ unsigned int* ppm_flip_v(const unsigned int* buf, const PPM img); +/** + * @brief Rotates image on 90 Clockwise + * @details Creates a new buffer to move pixels to and rotates pixels 90 degrees + * clockwise around center of origin, freeing the old buffer at the end. + * @param[in] buf Pointer to original pixel buffer, later freed. + * @param[in] img Pointer to loaded PPM image for calculations + * @return unsigned int Pointer to new pixel buffer + * @retval NULL If original buffer is invalid, if image pointer is invalid or if + * new buffer fails to create and is invalid + * */ unsigned int* u32_rotate(const unsigned int* buf, PPM* m_img); diff --git a/src/main.c b/src/main.c index 48ffc1f..3162d1c 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ #include #include "image/filters.h" +#include "image/transformations.h" #include "image/utils.h" // #include "image/filters.h" // #include "image/transformations.h" @@ -18,11 +19,12 @@ main() }; unsigned int* buf = ppm_load(img.name, &img); - for (int i = 0; i < img.len; i++) - { - // you need to replace the old value with the new updated value - buf[i] = u32_grayscale(buf[i]); - } + // for (int i = 0; i < img.len; i++) + // { + // // you need to replace the old value with the new updated value + // buf[i] = u32_grayscale(buf[i]); + // } + buf = u32_rotate(buf, &img); ppm_save(buf, img, "../IMG_1649_new.ppm"); // PPM out_2 = inherit_from_jpeg(&out_1, '6'); diff --git a/src/transformations.c b/src/transformations.c index 2862358..d38ede2 100644 --- a/src/transformations.c +++ b/src/transformations.c @@ -5,6 +5,10 @@ unsigned int* ppm_flip_h(const unsigned int* buf, const PPM img) { + if (!buf) + { + return NULL; + } unsigned int* flip = malloc(img.len * sizeof(unsigned int)); if (!flip) { @@ -19,6 +23,7 @@ ppm_flip_h(const unsigned int* buf, const PPM img) idx++; } } + free((void*)buf); return flip; } @@ -26,6 +31,10 @@ ppm_flip_h(const unsigned int* buf, const PPM img) unsigned int* ppm_flip_v(const unsigned int* buf, const PPM img) { + if (!buf) + { + return NULL; + } unsigned int* flip = malloc(img.len * sizeof(unsigned int)); if (!flip) { @@ -41,6 +50,7 @@ ppm_flip_v(const unsigned int* buf, const PPM img) idx++; } } + free((void*)buf); return flip; } @@ -48,7 +58,15 @@ ppm_flip_v(const unsigned int* buf, const PPM img) unsigned int* u32_rotate(const unsigned int* buf, PPM* m_img) { + if (!buf || !m_img) + { + return NULL; + } unsigned int* mask = malloc(m_img->len * sizeof(unsigned int)); + if (!mask) + { + return NULL; + } int old_width = m_img->width; int old_height = m_img->height; for (int row = 0; row < old_height; row++) @@ -64,5 +82,6 @@ u32_rotate(const unsigned int* buf, PPM* m_img) } m_img->width = old_height; m_img->height = old_width; + free((void*)buf); return mask; }