Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as Plain Text by Kris ( 14 years ago )
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pmg.h"
struct Obrazek wczytaj(FILE* fp)
{
char znak,naglowek[3];
int i,j,k;
struct Obrazek o;
fgets(naglowek,3,fp);
if (naglowek[0] != 'P' || naglowek[1] != '2')
printf("ZLY FORMAT PLIKU. NIE PMG!");
znak = fgetc(fp);
do
{
if ( (znak = fgetc(fp)) == '#')
while ( fgetc(fp) != '\n');
else
{
ungetc(znak,fp);
}
}
while ((znak != EOF) && (znak == '#'));
if ( fscanf (fp, "%d %d\n%d",&o.szerokosc,&o.wysokosc,&o.skala) != 3)
printf (" BRAK WYSOKOSCI, SZEROKOSCI LUB SKALI SZAROSCI W PLIKU!!!");
o.tab = (int**) calloc ( o.wysokosc, sizeof(int*));
for (k=0; k < o.wysokosc; k++)
{
o.tab[k] = (int*) calloc ( o.szerokosc, sizeof(int));
}
for ( i = 0; i < o.wysokosc; i++)
{
for ( j = 0; j < o.szerokosc; j++)
{
fscanf(fp,"%d ",&o.tab[i][j]);
printf("%d ",o.tab[i][j]);
}
fscanf(fp,"\n");
printf("\n");
}
return o;
}
struct Obrazek obrotprawo(struct Obrazek* o)
{
struct Obrazek obrocona;
int i,j,k;
obrocona.wysokosc = o->szerokosc;
obrocona.szerokosc = o->wysokosc;
obrocona.skala = o->skala;
obrocona.tab = (int**)calloc(obrocona.szerokosc, sizeof(int*));
for(k = 0; k < obrocona.szerokosc; k++)
{
obrocona.tab[k] = (int*)calloc(obrocona.wysokosc, sizeof(int));
}
for ( i = 0; i < obrocona.wysokosc; i++)
{
for ( j = 0; j < obrocona.szerokosc; j++)
obrocona.tab[j][i] = o->tab[i][o->wysokosc-1-j];
}
return obrocona;
}
void zapis (struct Obrazek* o, FILE* fp)
{
int i,j;
fprintf(fp,"P2\n#SIEMA\n%d %d\n%d\n",o->szerokosc,o->wysokosc,o->skala);
for ( i = 0; i < o->wysokosc; i++)
{
for ( j = 0; j < o->szerokosc; j++)
{
printf("%d ",o->tab[i][j]);
fprintf(fp,"%d ",o->tab[i][j]);
}
fprintf(fp,"\n");
printf("\n");
}
}
void kontrast (struct Obrazek* o,int ile)
{
int LUT[256],i,j;
for ( i = 0; i < 256; i++)
{
if ( i < ile )
{
LUT[i] = 0;
}
else if ( i < (255 - ile))
{
LUT[i] = (int)(256/(256.0-(2*ile))*(i-ile));
}
else if ( i >= (256-ile))
{
LUT[i] = 255;
}
}
for ( i = 0; i < o->wysokosc; i++)
{
for ( j = 0; j < o->szerokosc; j++)
{
o->tab[j][i] = LUT[o->tab[j][i]];
}
}
}
void odszumed(struct Obrazek * o)
{
int i,j,k,l,h,tablica[9],chwil;
struct Obrazek odszum;
odszum.szerokosc = o->szerokosc;
odszum.wysokosc = o->wysokosc;
odszum.skala = o->skala;
odszum.tab = (int**) calloc ( odszum.wysokosc, sizeof(int*));
for (k=0; k < odszum.wysokosc; k++)
{
odszum.tab[k] = (int*) calloc ( odszum.szerokosc, sizeof(int));
}
for ( i = 1; i < o->wysokosc-1; i++)
{
for ( j = 1; j < o->szerokosc-1; j++)
{
for (k = 0; k < 3; k++)
{
for ( l = 0; l < 3; l++)
{
for ( h = 0; h <9 ; h++)
{
tablica[h] = o->tab[i+k-1][j+l-1];
}
}
}
for ( k = 0; k < 9; k++)
{
for ( l = 0; l < 8; l++)
{
if (tablica[l] > tablica[l+1])
{
chwil = tablica[l+1];
tablica[l+1] = tablica[j];
tablica[j] = chwil;
}
}
}
//przezrwa
odszum.tab[i][j] = tablica[4];
}
}
for (i = 0; i < o->wysokosc; i++)
{
for (j = 0; j < o->szerokosc; j++)
{
o->tab[i][j] = odszum.tab[i][j];
}
}
}
Revise this Paste