#include #include #ifndef _WIN32 #include "../winlnxdefs.h" #endif // _WIN32 #include "main.h" #include "2xsai.h" // this filter is crap, it's just some stuffs i tried to see what they're doing // it's blurring texture edges which is good for some textures, bad for some others. unsigned char *blur_edges(unsigned char *source, int width, int height, int *width2, int *height2) { unsigned char *result, *temp, *temp2; char mx[3*3] = {-1, 0, 1, -2, 0, 2, -1, 0, 1}; char my[3*3] = {-1, -2, -1, 0, 0, 0, 1, 2 ,1}; int i,j; *width2 = width*2; *height2 = height*2; result = (unsigned char*)malloc(width*2*height*2*4); temp = (unsigned char*)malloc(width*2*height*2*4); temp2 = (unsigned char*)malloc(width*2*height*2*4); // size * 2 for (j=0; j>1; temp[j*2*width*2*4 + (i*2+1)*4 + 1] = ((int)source[j*width*4 + i*4 + 1] + (int)source[j*width*4 + (i+1)*4 + 1])>>1; temp[j*2*width*2*4 + (i*2+1)*4 + 2] = ((int)source[j*width*4 + i*4 + 2] + (int)source[j*width*4 + (i+1)*4 + 2])>>1; temp[j*2*width*2*4 + (i*2+1)*4 + 3] = ((int)source[j*width*4 + i*4 + 3] + (int)source[j*width*4 + (i+1)*4 + 3])>>1; } else { temp[j*2*width*2*4 + (i*2+1)*4 + 0] = temp[j*2*width*2*4 + i*2*4 + 0]; temp[j*2*width*2*4 + (i*2+1)*4 + 1] = temp[j*2*width*2*4 + i*2*4 + 1]; temp[j*2*width*2*4 + (i*2+1)*4 + 2] = temp[j*2*width*2*4 + i*2*4 + 2]; temp[j*2*width*2*4 + (i*2+1)*4 + 3] = temp[j*2*width*2*4 + i*2*4 + 3]; } if (j < (height-1)) { temp[(j*2+1)*width*2*4 + i*2*4 + 0] = ((int)source[j*width*4 + i*4 + 0] + (int)source[(j+1)*width*4 + i*4 + 0])>>1; temp[(j*2+1)*width*2*4 + i*2*4 + 1] = ((int)source[j*width*4 + i*4 + 1] + (int)source[(j+1)*width*4 + i*4 + 1])>>1; temp[(j*2+1)*width*2*4 + i*2*4 + 2] = ((int)source[j*width*4 + i*4 + 2] + (int)source[(j+1)*width*4 + i*4 + 2])>>1; temp[(j*2+1)*width*2*4 + i*2*4 + 3] = ((int)source[j*width*4 + i*4 + 3] + (int)source[(j+1)*width*4 + i*4 + 3])>>1; if (i < (width-1)) { temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 0] = ((int)source[j*width*4 + i*4 + 0] + (int)source[(j+1)*width*4 + (i+1)*4 + 0])>>1; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 1] = ((int)source[j*width*4 + i*4 + 1] + (int)source[(j+1)*width*4 + (i+1)*4 + 1])>>1; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 2] = ((int)source[j*width*4 + i*4 + 2] + (int)source[(j+1)*width*4 + (i+1)*4 + 2])>>1; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 3] = ((int)source[j*width*4 + i*4 + 3] + (int)source[(j+1)*width*4 + (i+1)*4 + 3])>>1; } else { temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 0] = temp[j*2*width*2*4 + i*2*4 + 0]; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 1] = temp[j*2*width*2*4 + i*2*4 + 1]; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 2] = temp[j*2*width*2*4 + i*2*4 + 2]; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 3] = temp[j*2*width*2*4 + i*2*4 + 3]; } } else { temp[(j*2+1)*width*2*4 + i*2*4 + 0] = temp[j*2*width*2*4 + i*2*4 + 0]; temp[(j*2+1)*width*2*4 + i*2*4 + 1] = temp[j*2*width*2*4 + i*2*4 + 1]; temp[(j*2+1)*width*2*4 + i*2*4 + 2] = temp[j*2*width*2*4 + i*2*4 + 2]; temp[(j*2+1)*width*2*4 + i*2*4 + 3] = temp[j*2*width*2*4 + i*2*4 + 3]; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 0] = temp[j*2*width*2*4 + i*2*4 + 0]; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 1] = temp[j*2*width*2*4 + i*2*4 + 1]; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 2] = temp[j*2*width*2*4 + i*2*4 + 2]; temp[(j*2+1)*width*2*4 + (i*2+1)*4 + 3] = temp[j*2*width*2*4 + i*2*4 + 3]; } } } // gradient for (j=0; j