Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define sizeX (1920/1)
- #define sizeY (1080/1)
- unsigned char in[sizeY/10][sizeX/10][3];
- unsigned char out[sizeY][sizeX][3];
- unsigned char b[sizeY][sizeX][3];
- unsigned char outCopy[sizeY][sizeX][3];
- unsigned char header[18];
- void read(char input[256]) {
- FILE* f;
- f = fopen(input, "rb");
- if(!f) {
- printf("File Reading Failed\n");
- }
- fread(&header, 1, 18, f);
- fread(&in, 1, sizeY*sizeX*3, f);
- fclose(f);
- }
- void write(char output[256]) {
- FILE* fw;
- fw = fopen(output, "wb+");
- if(!fw) {
- printf("File Writing Failed\n");
- }
- header[16] = 24;
- header[13] = sizeX/256;
- header[12] = sizeX%256;
- header[15] = sizeY/256;
- header[14] = sizeY%256;
- fwrite(&header, 1, 18, fw);
- fwrite(&out, 1, sizeY*sizeX*3, fw);
- fclose(fw);
- }
- int a(int n) {
- if(n < 0) {
- n *= -1;
- }
- return n;
- }
- void blur(int n) {
- int x;
- int y;
- int bl;
- int i;
- for(i = 0; i < n; i++) {
- for(x = 1; x < sizeX-1; x++) {
- for(y = 1; y < sizeY-1; y++) {
- bl = 0;
- bl += out[y][x][0];
- bl += out[y+1][x][0];
- bl += out[y-1][x][0];
- bl += out[y+1][x+1][0];
- bl += out[y+1][x-1][0];
- b[y][x][0] = bl/5;
- bl = 0;
- bl += out[y][x][1];
- bl += out[y+1][x][1];
- bl += out[y-1][x][1];
- bl += out[y+1][x+1][1];
- bl += out[y+1][x-1][1];
- b[y][x][1] = bl/5;
- bl = 0;
- bl += out[y][x][2];
- bl += out[y+1][x][2];
- bl += out[y-1][x][2];
- bl += out[y+1][x+1][2];
- bl += out[y+1][x-1][2];
- b[y][x][2] = bl/5;
- }
- }
- for(x = 1; x < sizeX-1; x++) {
- for(y = 1; y < sizeY-1; y++) {
- out[y][x][0] = b[y][x][0];
- out[y][x][1] = b[y][x][1];
- out[y][x][2] = b[y][x][2];
- }
- }
- printf("(%i/%i)\n", i+1, n);
- }
- }
- void copyOver() {
- int x;
- int y;
- for(x = 0; x < sizeX; x++) {
- for(y = 0; y < sizeY; y++) {
- out[y][x][0] = in[y/10][x/10][0];
- out[y][x][1] = in[y/10][x/10][1];
- out[y][x][2] = in[y/10][x/10][2];
- }
- }
- }
- void analyze() {
- int x;
- int y;
- int pr;
- int pg;
- int pb;
- int best[5];
- int i;
- int b;
- int bi;
- for(x = 0; x < sizeX; x++) {
- for(y = 0; y < sizeY; y++) {
- outCopy[y][x][0] = out[y][x][0];
- outCopy[y][x][1] = out[y][x][1];
- outCopy[y][x][2] = out[y][x][2];
- }
- }
- for(x = 0; x < sizeX; x++) {
- for(y = 0; y < sizeY; y++) {
- pr = a(in[y/10][x/10][2] - outCopy[y][x][2]);
- pg = a(in[y/10][x/10][1] - outCopy[y][x][1]);
- pb = a(in[y/10][x/10][0] - outCopy[y][x][0]);
- best[0] = (pr+pg+pb);
- pr = a(in[y/10][x/10-1][2] - outCopy[y][x][2]);
- pg = a(in[y/10][x/10-1][1] - outCopy[y][x][1]);
- pb = a(in[y/10][x/10-1][0] - outCopy[y][x][0]);
- best[1] = (pr+pg+pb);
- pr = a(in[y/10][x/10+1][2] - outCopy[y][x][2]);
- pg = a(in[y/10][x/10+1][1] - outCopy[y][x][1]);
- pb = a(in[y/10][x/10+1][0] - outCopy[y][x][0]);
- best[2] = (pr+pg+pb);
- pr = a(in[y/10+1][x/10][2] - outCopy[y][x][2]);
- pg = a(in[y/10+1][x/10][1] - outCopy[y][x][1]);
- pb = a(in[y/10+1][x/10][0] - outCopy[y][x][0]);
- best[3] = (pr+pg+pb);
- pr = a(in[y/10-1][x/10][2] - outCopy[y][x][2]);
- pg = a(in[y/10-1][x/10][1] - outCopy[y][x][1]);
- pb = a(in[y/10-1][x/10][0] - outCopy[y][x][0]);
- best[4] = (pr+pg+pb);
- b = 10000;
- bi = 0;
- for(i = 0; i < 5; i++) {
- if(best[i] < b) {
- b = best[i];
- bi = i;
- }
- }
- switch(bi) {
- case 0:
- out[y][x][0] = in[y/10][x/10][0];
- out[y][x][1] = in[y/10][x/10][1];
- out[y][x][2] = in[y/10][x/10][2];
- break;
- case 1:
- out[y][x][0] = in[y/10][x/10-1][0];
- out[y][x][1] = in[y/10][x/10-1][1];
- out[y][x][2] = in[y/10][x/10-1][2];
- break;
- case 2:
- out[y][x][0] = in[y/10][x/10+1][0];
- out[y][x][1] = in[y/10][x/10+1][1];
- out[y][x][2] = in[y/10][x/10+1][2];
- break;
- case 3:
- out[y][x][0] = in[y/10+1][x/10][0];
- out[y][x][1] = in[y/10+1][x/10][1];
- out[y][x][2] = in[y/10+1][x/10][2];
- break;
- case 4:
- out[y][x][0] = in[y/10-1][x/10][0];
- out[y][x][1] = in[y/10-1][x/10][1];
- out[y][x][2] = in[y/10-1][x/10][2];
- break;
- }
- }
- }
- }
- int main(void) {
- printf("Reading...\n");
- read("image.tga");
- printf("Copying...\n");
- copyOver();
- printf("Blurring...\n");
- blur(200);
- printf("Analyzing...\n");
- analyze();
- printf("Writing...\n");
- write("output.tga");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement