17 #include "../src/imageraster.h"
26 int min(
int a,
int b) {
27 return (a < b) ? a : b;
37 int max(
int a,
int b) {
38 return (a > b) ? a : b;
53 void drawPoint(
int *img_in,
int x_size,
int y_size,
int x,
int y,
int r,
int g,
int b) {
54 if (x > x_size || y > x_size || x<=0 || y<=0) {
59 img_in[imageindex] = r;
60 img_in[imageindex + 1] = g;
61 img_in[imageindex + 2] = b;
78 void drawCircle(
int *img_in,
int x_size,
int y_size,
int raio,
int x,
int y,
int r,
int g,
int b) {
81 for ( ; theta <= 2 * M_PI; theta += step) {
82 int x_next = (
int)(cos(theta) * raio + x);
83 int y_next = (
int)(sin(theta) * raio + x);
103 void drawLine(
int *img_in,
int x_size,
int y_size,
int x1,
int y1 ,
int x2,
int y2,
int c_r,
int c_g,
int c_b) {
110 for (
int y=ymin; y<=ymax; y++) {
113 }
else if (y1 == y2) {
117 for (
int x=xmin; x<=xmax; x++) {
120 }
else if (abs(x1-x2) > abs(y1-y2)) {
123 float m = (
float)(y2-y1)/(
float)(x2-x1);
124 float b = y1 - m * x1;
125 for (
float x=xmin;x<= xmax;x += 0.01) {
130 }
else if (abs(x1-x2) <= abs(y1-y2)) {
134 float m = (
float)(y2-y1)/(
float)(x2-x1);
135 float b = y1 - m * x1;
136 for (
float y=ymin;y<= ymax;y += 0.01) {
155 return (x + ((y - 1) * x_size)) * 3 - 3;
169 position = position / 3 ;
170 *y = (position) / x_size + 1;
171 *x = (position) % x_size + 1;
184 void imageFill(
int *img_in,
int x_size,
int y_size,
int r,
int g,
int b) {
186 for (
int i = 0; i < y_size; i++) {
187 for (
int j = 0; j < x_size; j++) {
188 img_in[3*(i*x_size+j)+0] = r;
189 img_in[3*(i*x_size+j)+1] = g;
190 img_in[3*(i*x_size+j)+2] = b;
206 int r_val, g_val, b_val;
208 while ((c = fgetc(f)) != EOF) {
232 int x_val, y_val, maxcolors_val;
239 while (fgets(line,
MAXLINE, f) != NULL) {
241 for (i = 0; i < strlen(line); i++) {
242 if (isgraph(line[i]) && (flag == 0)) {
243 if ((line[i] ==
'#') && (flag == 0)) {
250 count += sscanf(line,
"%s %d %d %d", magic, &x_val, &y_val, &maxcolors_val);
251 }
else if (count == 1) {
252 count += sscanf(line,
"%d %d %d", &x_val, &y_val, &maxcolors_val);
253 }
else if (count == 2) {
254 count += sscanf(line,
"%d %d", &y_val, &maxcolors_val);
255 }
else if (count == 3) {
256 count += sscanf(line,
"%d", &maxcolors_val);
264 if (!(strcmp(magic,
"P6") == 0)) {
265 fprintf(stderr,
"Error: Input file not in PPM format!\n");
269 fprintf(stderr,
"Read: type=%s, x_size=%d, y_size=%d, maxcolors_val=%d\n",
270 magic, x_val, y_val, maxcolors_val);
284 void writeImage(FILE *f,
int *img_out,
char *img_out_fname,
int x_size,
int y_size)
289 fprintf(f,
"# %s\n", img_out_fname);
291 fprintf(f,
"%d %d\n", x_size, y_size);
293 fprintf(f,
"%d\n", 255);
296 for (i = 0; i < y_size; i++) {
297 for (j = 0; j < x_size; j++) {
299 img_out[3*(i*x_size+j)+0],
300 img_out[3*(i*x_size+j)+1],
301 img_out[3*(i*x_size+j)+2]);