#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define height 256
#define width 256
typedef unsigned char BYTE;
void main()
{
int hist[256] = {0};
float sum_hist[256] = {0} ; // 초기화안해주면 값미묘하게 다름 꼭꼭.
int sum = 0;
FILE *F_I = fopen("불러올이미지","rb");
FILE *F_O = fopen("출력될이미지","wb");
BYTE* Me = new BYTE [height*width];
BYTE* MeOut = new BYTE [height*width];
fread(Me, sizeof(BYTE), height*width, F_I);
float result = 255.0f/(float)(width*height) ;
for ( int i = 0; i<height ; i++)
{
for(int j = 0; j<width; j++)
{
hist[Me[i*width+j]]++;
}
}
//반올림
for(int i = 0; i<256; i++)
{
sum += hist[i];
sum_hist[i] = (int)((sum*result)+0.5);
}
for(int i = 0; i<height; i++)
{
for(int j = 0; j<width; j++)
{
MeOut[i*width+j] = sum_hist[Me[i*width+j]];
}
}
fwrite(MeOut,sizeof(BYTE),height*width, F_O);
delete Me;
delete MeOut;
fclose(F_I);
fclose(F_O);
}