diff_c.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. #include <stdlib.h>
  2. #include <math.h>
  3. #include "../tp2.h"
  4. unsigned int max(unsigned int a, unsigned int b, unsigned int c){
  5. if (a > b) {
  6. return a > c ? a : c;
  7. } else {
  8. return b > c ? b : c;
  9. }
  10. }
  11. void diff_c (unsigned char *src, unsigned char *src_2, unsigned char *dst, int filas, int cols, int src_row_size, int src_2_row_size, int dst_row_size) {
  12. unsigned char (*src_matrix)[src_row_size] = (unsigned char (*)[src_row_size]) src;
  13. unsigned char (*src_2_matrix)[src_2_row_size] = (unsigned char (*)[src_2_row_size]) src_2;
  14. unsigned char (*dst_matrix)[dst_row_size] = (unsigned char (*)[dst_row_size]) dst;
  15. int i,j;
  16. short val;
  17. for(i=0; i<cols; i++){
  18. for(j=0; j<filas * 4; j+=4){
  19. val=max(abs(src_matrix[i][j+0]-src_2_matrix[i][j+0]), // Diferencia de canal B y max
  20. abs(src_matrix[i][j+1]-src_2_matrix[i][j+1]), // Diferencia G
  21. abs(src_matrix[i][j+2]-src_2_matrix[i][j+2])); // Diferencia R
  22. dst_matrix[i][j+0]=val; // Guardo B
  23. dst_matrix[i][j+1]=val; // Guardo G
  24. dst_matrix[i][j+2]=val; // Guardo R
  25. dst_matrix[i][j+3]=255; // Alpha siempre tiene 255
  26. }
  27. }
  28. }