Skip to content
Snippets Groups Projects
Commit 04e72579 authored by damian.boquetec's avatar damian.boquetec
Browse files

Comments added$

parent ea9126e9
No related branches found
No related tags found
No related merge requests found
#include "pgm.h"
/**
* pgm_read_from_file reads a pgm file and fills the pgm struct "p" with its data
* @param p is a pointer of pgm struct
* @param filename is a pointer of characters representing the path of the targeted file
* @return pgm_error
**/
pgm_error pgm_read_from_file(pgm *p, char *filename){
if (filename == NULL || p == NULL){
return failure;
......@@ -23,6 +30,13 @@ pgm_error pgm_read_from_file(pgm *p, char *filename){
return success;
}
/**
* pgm_write_to_file creates a pgm file from a pgm struct with a custom name
* @param p is a pointer of pgm struct
* @param filename is a pointer of characters that defines the custom file name
* @return pgm_error
**/
pgm_error pgm_write_to_file(pgm *p, char *filename){
if (filename == NULL || p == NULL){
return failure;
......@@ -45,6 +59,13 @@ pgm_error pgm_write_to_file(pgm *p, char *filename){
return success;
}
/**
* pgm_negative modifies an empty pgm struct with a negative version of the original one
* @param neg is a pointer of pgm struct which contains the negative version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error pgm_negative(pgm *neg, const pgm *const orig){
if (neg == NULL || orig == NULL){
return failure;
......@@ -61,6 +82,13 @@ pgm_error pgm_negative(pgm *neg, const pgm *const orig){
return success;
}
/**
* pgm_symmetry_hori modifies an empty pgm struct with a horizontal symmetric version of the original one
* @param sym is a pointer of pgm struct which contains the modified version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error pgm_symmetry_hori(pgm *sym, const pgm *const orig){
if (sym == NULL || orig == NULL){
return failure;
......@@ -77,6 +105,13 @@ pgm_error pgm_symmetry_hori(pgm *sym, const pgm *const orig){
return success;
}
/**
* pgm_symmetry_vert modifies an empty pgm struct with a vertical symmetric version of the original one
* @param sym is a pointer of pgm struct which contains the modified version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error pgm_symmetry_vert(pgm *sym, const pgm *const orig){
if (sym == NULL || orig == NULL){
return failure;
......@@ -93,6 +128,13 @@ pgm_error pgm_symmetry_vert(pgm *sym, const pgm *const orig){
return success;
}
/**
* pgm_symmetry_cent modifies an empty pgm struct with a central symmetric version of the original one
* @param sym is a pointer of pgm struct which contains the modified version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error pgm_symmetry_cent(pgm *sym, const pgm *const orig){
if (sym == NULL || orig == NULL){
return failure;
......@@ -109,6 +151,13 @@ pgm_error pgm_symmetry_cent(pgm *sym, const pgm *const orig){
return success;
}
/**
* pgm_photomaton modifies an empty pgm struct with a x4 photomaton version of the original one
* @param photomaton is a pointer of pgm struct which contains the modified version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error pgm_photomaton(pgm *photomaton, const pgm *const orig){
if (photomaton == NULL || orig == NULL){
return failure;
......@@ -134,6 +183,19 @@ pgm_error pgm_photomaton(pgm *photomaton, const pgm *const orig){
return success;
}
/**
* pgm_crop modifies an empty pgm struct with a cropped version of the original one depending on bounds
* @param crop is a pointer of pgm struct which contains the cropped version
* @param orig constant pointer of pgm which is the original pgm
* @param x0 is the lower x axis bound
* @param x1 is the upper x axis bound
* @param y0 is the lower y axis bound
* @param y1 is the upper y axis bound
* @return pgm_error
*
* WARNING: this function doesn't work properly, only squared bounds make it work
**/
pgm_error pgm_crop(pgm *crop, const pgm *const orig, int32_t x0, int32_t x1, int32_t y0, int32_t y1){
if (crop == NULL || orig == NULL){
return failure;
......@@ -147,6 +209,14 @@ pgm_error pgm_crop(pgm *crop, const pgm *const orig, int32_t x0, int32_t x1, int
return success;
}
/**
* add_zeros_in_pgm modifies an empty pgm struct with a "zero bordered" version of the original one
* Used to avoid edge problems when calculating convolutions
* @param zeroedPgm is a pointer of pgm struct which contains the "zero bordered" version
* @param orig constant pointer of pgm which is the original pgm
* @return pgm_error
**/
pgm_error add_zeros_in_pgm(pgm *zeroedPgm, const pgm *const orig){
if (zeroedPgm == NULL || orig == NULL){
return failure;
......@@ -169,6 +239,15 @@ pgm_error add_zeros_in_pgm(pgm *zeroedPgm, const pgm *const orig){
return success;
}
/**
* calculate_pixel_conv calculates the convoluted version of a pixel using a sub matrix from
* an image and a kernel
* @param m is a matrix containing pixels from an image
* @param kernel constant pointer of matrix containing values to calcuate a convolution
* @param max represents the maximum value of a pixel
* @return result
**/
int calculate_pixel_conv(const matrix m, const matrix *const kernel, int max){
int result = 0;
......@@ -184,6 +263,15 @@ int calculate_pixel_conv(const matrix m, const matrix *const kernel, int max){
return result;
}
/**
* pmg_conv modifies an empty pgm struct with a "convoluted" version of the original one depending on a kernel
* @param conv is a pointer of pgm which contains the "convoluted" version
* @param orig constant pointer of pgm which is the original pgm
* @param kernel constant pointer of matrix containing values to calcuate a convolution
* @param norm double number added to modify convolution "behaviour"
* @return pgm_error
**/
pgm_error pmg_conv(pgm *conv, const pgm *const orig, const matrix *const kernel, double norm){
if (conv == NULL || orig == NULL || kernel == NULL){
return failure;
......@@ -203,8 +291,14 @@ pgm_error pmg_conv(pgm *conv, const pgm *const orig, const matrix *const kernel,
return success;
}
/**
* demo uses SDL2 library to display an image on a window
* @param img is a constant pointer of the pgm displayed on screen
* @return pgm_error
**/
pgm_error demo(const pgm *const img){
int width = img->pixels.l, height = img->pixels.c;
int width = img->pixels.c, height = img->pixels.l;
struct gfx_context_t *ctxt = gfx_create("Example", width, height);
while (gfx_keypressed() != 27/*ESC btn code*/) {
......
#include "pgm.h"
int main(){
//variables initialization
pgm a;
pgm neg;
pgm sym_hori;
......@@ -12,50 +13,52 @@ int main(){
pgm pgmWithZeros;
pgm convolution;
int conv[9] = {1,1,1,1,1,1,1,1,1};
matrix convKernel;
matrix_init_from_array(&convKernel, 3, 3, conv, 9);
//Read pgm
printf("%d", pgm_read_from_file(&a, "mandrill.pgm"));
//printf("%d", pgm_write_to_file(&a, "newf.pgm"));
//Negative
printf("%d", pgm_negative(&neg, &a));
//printf("%d", pgm_write_to_file(&neg, "neg.pgm"));
//horizontal symmetry
printf("%d", pgm_symmetry_hori(&sym_hori, &a));
//printf("%d", pgm_write_to_file(&sym_hori, "sym_hori.pgm"));
//vertical symmetry
printf("%d", pgm_symmetry_vert(&sym_vert, &a));
//printf("%d", pgm_write_to_file(&sym_vert, "sym_vert.pgm"));
//central symmetry
printf("%d", pgm_symmetry_cent(&sym_cent, &a));
//printf("%d", pgm_write_to_file(&sym_cent, "sym_cent.pgm"));
//Photomaton x4
printf("%d", pgm_photomaton(&photomatonx4, &a));
//printf("%d", pgm_write_to_file(&photomatonx4, "photomatonx4.pgm"));
//Photomaton x16
printf("%d", pgm_photomaton(&photomatonx16, &photomatonx4));
//printf("%d", pgm_write_to_file(&photomatonx16, "photomatonx16.pgm"));
//Crop
printf("%d", pgm_crop(&cropped, &a, 100, 200, 200, 500));
//printf("%d", pgm_write_to_file(&cropped, "cropped.pgm"));
//Convolution
printf("%d", add_zeros_in_pgm(&pgmWithZeros, &a));
printf("%d", pmg_conv(&convolution, &pgmWithZeros, &convKernel, 1));
//printf("%d", pgm_write_to_file(&convolution, "convolution.pgm"));
//demo(&neg);
//demo(&sym_hori);
//demo(&sym_vert);
//demo(&sym_cent);
//demo(&photomatonx4);
//demo(&photomatonx16);
//demo(&cropped);
//demo(&convolution);
demo(&neg);
demo(&sym_hori);
demo(&sym_vert);
demo(&sym_cent);
demo(&photomatonx4);
demo(&photomatonx16);
demo(&cropped);
demo(&convolution);
//Destroying pgm's matrixes
matrix_destroy(&a.pixels);
matrix_destroy(&neg.pixels);
matrix_destroy(&sym_hori.pixels);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment