#include <stdio.h>
#include <stdlib.h>
#define WIDTH 512
#define HEIGH 512 // WIDTH, HEIGH 각각에 512이란 값으로 정의
typedef unsigned char BYTE; // unsigned char를 BYTE로 표현
int main()
{
FILE *fp_in = 0, *fp_out = 0; // fp_in과 fp_out에 쓰레기값 0을 대입후 포인터 생성.
BYTE **img_in = 0, **img_out = 0; // img_in과 img_out에 쓰레기값 0을 대입, 더블 포인터 생성
int i = 0, j = 0; // 반복문을 위한 변수.
fp_in = fopen("Lena_512.raw", "rb"); // 레나 데이터가 binary 형태로 읽어오고 fp_in이 가르키는 주소에 저장.
if (fp_in == NULL) {
printf("File open failed\n"); //fp_in에 아무런 데이터가 입력되지 않았을 때 다음과같은 문구가 뜸.
}
img_in = (BYTE **)malloc(sizeof(BYTE *)*HEIGH); // img_in에 HEIGH만큼 1byte의 크기로 메모리 할당.
for (i = 0; i < HEIGH; i++) {
img_in[i] = (BYTE *)malloc(sizeof(BYTE)*HEIGH); // 각 block에 있는 포인터 1개가 하나의 행역할을 하여 최종적으로 2차원 배열 생성.
}
for (i = 0; i < HEIGH; i++) {
fread(img_in[i], sizeof(BYTE), WIDTH, fp_in); // fp_in에 있는 데이터를 1byte 크기로 WIDTH의 횟수만큼 img_in[i]에 읽어옴.
}
img_out = (BYTE **)malloc(sizeof(BYTE*)*HEIGH); // img_in과 마찬가지로 메모리 할당.
for (i = 0; i < HEIGH; i++) {
img_out[i] = (BYTE *)malloc(sizeof(BYTE)*WIDTH);
}
for (i = 0; i < HEIGH; i++) {
for (j = 0; j < WIDTH; j++) {
img_out[i][j] = img_in[i][j]; //img_in의 데이터를 img_out에 가져옴.
}
}
fp_out = fopen("[Output]Lena(512X512).raw", "wb"); // 레나 데이터의 출력을 binary형태로 쓰고 그 파일을 연다. 그리고 fp_out의 주소에 저장.
if (fp_out == NULL) {
printf("File open failed\n"); // 데이터가 들어오지 않았을 때 다음과 같은 문구가 나옴.
}
for (i = 0; i < HEIGH; i++) {
fwrite(img_out[i], sizeof(BYTE), WIDTH, fp_out); //img_out의 배열에 1열의 각 첫번째 요소에 저장된 내용을 1바이트의 크기로 512번 ( 즉 512 바이트 ) < fp_out이 가리키는곳 -> [Output]Lena(512X512).raw >에 데이터를 쓴다.
}
for (i = 0; i < HEIGH; i++) {
free(img_in[i]);
free(img_out[i]);
}
free(img_in);
free(img_out);
// 동적할당을 해제.
fclose(fp_in);
fclose(fp_out);
// 작업을 마친후에 파일을 닫는 함수.
return 0;
}
Lena_512.raw 라는 사진 파일의 크기를 바꾸어 주는 프로그램을 설계중인데 빌드를 해보면
다고 뜨면서 그 이후
와같이 됩니다.
디버그하지않고 시작을 누르면
위와같이 뜨는데
혹시 해결방안을 알 수 있을까요 ?ㅠㅠ