게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 오류가 났는데 해결좀 해주세요.ㅠ
게시물ID : programmer_9551짧은주소 복사하기
작성자 : chulbuk
추천 : 0/8
조회수 : 2351회
댓글수 : 2개
등록시간 : 2015/04/25 23:40:14
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
struct RGBQUAD {
 unsigned char rgbBlue;
 unsigned char rgbGreen;
 unsigned char rgbRed;
 unsigned char  rgbFlags;

};
#define SIZE 512
struct RGBQUAD bmp_pal[256];
void main(){
 int i, j;
 unsigned char OrgImg[SIZE][SIZE]; //raw이미지를 저장하기 위한 배열
 unsigned char temp;     //raw이미지를 뒤집어서 저장하기위한 임시변수
 FILE *raw, *bmp, *fbalance;
 //주어진 조건으로 raw이미지 생성 부분
 for (i = 0; i<SIZE; i++)
 {
  for (j = 0; j<SIZE; j++){
   if (j<100)
    OrgImg[i][j] = 120;
   else if (j<200)
    OrgImg[i][j] = 3 * j / 20 + 105;
   else if (j<280)
    OrgImg[i][j] = 9 * j / 8 - 90;
   else if (j<300)
    OrgImg[i][j] = 3 * j / 4 + 15;
   else
    OrgImg[i][j] = 240;
  }
 }
 //raw파일로 저장
 raw = fopen("hw1.raw", "wb");
 fwrite(OrgImg, sizeof(unsigned char), SIZE*SIZE, raw);
 fclose(raw);
 BITMAPFILEHEADER hf;
 BITMAPINFOHEADER hInfo;
 
 //파일헤드 정보입력
 hf.bfType = 0x4D42;  //"BM"이라는 값을 저장
 //Byte단위의 전체파일 크기
 hf.bfSize = (DWORD)(SIZE*SIZE + sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER));
 hf.bfReserved1 = 0;  //예약된 변수
 hf.bfReserved2 = 0;  //예약된 변수
 //영상데이터 위치까지의 거리
 hf.bfOffBits = (DWORD)(sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER));
 //영상헤드 정보입력
 hInfo.biSize = sizeof(BITMAPINFOHEADER); //이 구조체의 크기
 hInfo.biWidth = SIZE;   //픽셀단위로 영상의 폭
 hInfo.biHeight = SIZE;   //영상의 높이
 hInfo.biPlanes = 1;    //비트 플레인 수(항상 1)
 hInfo.biBitCount = 24;   //픽셀당 비트수(컬러, 흑백 구별)
 hInfo.biCompression = BI_RGB; //압축유무
 hInfo.biSizeImage = SIZE*SIZE; //영상의 크기(Byte단위)  
 hInfo.biXPelsPerMeter = 0;  //가로 해상도
 hInfo.biYPelsPerMeter = 0;  //세로 해상도
 hInfo.biClrUsed = 256 * 256 * 256;   //실제 사용 색상수
 hInfo.biClrImportant = 256 * 256 * 256;  //중요한 색상 인덱스
 //raw파일을 영상정보를 써준다
 //raw파일 읽기
 raw = fopen("hw1.raw", "rb");
 if (raw == NULL){
  printf("File Open Error!\n");
  return;
 }
 fread(OrgImg, sizeof(char), SIZE*SIZE, raw);
 fclose(raw);
 

 //raw파일 뒤집어 주기
 for (i = 0; i<SIZE / 2; i++){
  for (j = 0; j<SIZE; j++){
   temp = OrgImg[i][j];
   OrgImg[i][j] = OrgImg[SIZE - i - 1][j];
   OrgImg[SIZE - i - 1][j] = temp;
  }
 }
 // 인포헤더 아래에 팔레트가 오므로 1024만큼 뒤에 비트맵 데이터 시작
 hf.bfOffBits += 1024;
 // 8비트 비트맵이므로 8로 수정
 hInfo.biBitCount = 8;
 
 // 팔레트 만들기
 for (int i = 0; i < 256; i++)
 {
  bmp_pal[i].rgbRed = (BYTE)(((i >> 5) & 0x07) * 255 / 7);
  bmp_pal[i].rgbGreen = (BYTE)(((i >> 2) & 0x07) * 255 / 7);
  bmp_pal[i].rgbBlue = (BYTE)(((i >> 0) & 0x03) * 255 / 3);
  bmp_pal[i].rgbFlags = 0;
 }

 //bmp파일로 저장
 bmp = fopen("hw1.bmp", "wb");
 fwrite(&hf, sizeof(char), sizeof(BITMAPFILEHEADER), bmp);
 fwrite(&hInfo, sizeof(char), sizeof(BITMAPINFOHEADER), bmp);
 fwrite(bmp_pal, sizeof(bmp_pal), 1, fbalance);
 fwrite(fbalance, sizeof(unsigned char), SIZE * SIZE, fbalance);
    fwrite(OrgImg, sizeof(char), hInfo.biSizeImage, bmp);
 fclose(bmp);
}
 
이렇게 썼는데 오류 error C2371:  재정의. 기본 형식이 다릅니다. 뜨네요.ㅠ 어떻게 해결하면 좋을지 오유 회원님들 조언좀 부탁드려요.ㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호