마음의 안정을 찾기 위하여 - RAW File을 Bitmap 파일로 변환하기
2400678
35
406
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
RAW File을 Bitmap 파일로 변환하기
VC, MFC, C++/Graphic | 2009/11/22 20:02
출처 : 네이버 지식인

#include <stdio.h>
#include <stdlib.h>
 
typedef unsigned short WORD;
typedef unsigned long  DWORD;
typedef unsigned long  LONG;
typedef unsigned char  BYTE;
 
#ifndef BI_RGB
#define BI_RGB         0
#endif
 
#pragma pack(1)
 
typedef struct tagBITMAPFILEHEADER
{
    WORD   bfType;
    DWORD  bfSize;
    WORD   bfReserved1;
    WORD   bfReserved2;
    DWORD  bfOffBits;
}BITMAPFILEHEADER;
 
typedef struct tagBITMAPINFOHEADER
{
    DWORD   biSize;
    LONG    biWidth;
    LONG    biHeight;         
    WORD    biPlanes;         
    WORD    biBitCount;       
    DWORD   biCompression;   
    DWORD   biSizeImage;      
    LONG    biXPelsPerMeter;   
    LONG    biYPelsPerMeter;  
    DWORD   biClrUsed;        
    DWORD   biClrImportant;    
}BITMAPINFOHEADER;
 
typedef struct tagRGBQUAD
{
       BYTE rgbBlue;
       BYTE rgbGreen;
       BYTE rgbRed;
       BYTE rgbReserved;
}RGBQUAD;
 
#pragma pack()
 
// 그레이 RAW 파일을 그레이 비트맵 파일로 변환
int Gray_Raw2Bmp(char *pRawName, DWORD nWidth, DWORD nHeight, char *pBmpName)
{
       BITMAPFILEHEADER  file_h;
       BITMAPINFOHEADER  info_h;
       DWORD             dwBmpSize=0;
       DWORD             dwRawSize=0;
       DWORD             dwLine=0;
       long              lCount, i;
       FILE             *in, *out;
       char             *pData=NULL;
       RGBQUAD           rgbPal[256];
 
       in=fopen(pRawName, "rb");
       if (in==NULL)
       {
         printf("File Open Error!\n");
              return 0;
       }
      
       out=fopen(pBmpName, "wb");
      
       file_h.bfType      = 0x4D42;
       file_h.bfReserved1 = 0;
       file_h.bfReserved2 = 0;
       file_h.bfOffBits   =  sizeof(rgbPal) + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); 
       info_h.biSize          = sizeof(BITMAPINFOHEADER);
       info_h.biWidth         = (DWORD)nWidth;
       info_h.biHeight        = (DWORD)nHeight;
       info_h.biPlanes        = 1;
       info_h.biBitCount      = 8;
       info_h.biCompression   = BI_RGB;
       info_h.biXPelsPerMeter = 0;
       info_h.biYPelsPerMeter = 0;
       info_h.biClrUsed       = 0;
       info_h.biClrImportant  = 0;
      
       dwLine=((((info_h.biWidth * info_h.biBitCount) + 31) &~ 31) >> 3) ;
       dwBmpSize=dwLine * info_h.biHeight;
       info_h.biSizeImage     = dwBmpSize;
       file_h.bfSize          = dwBmpSize + file_h.bfOffBits + 2;
 
       dwRawSize=info_h.biWidth*info_h.biHeight;
       pData=(char *)malloc(sizeof(char)*dwRawSize+16);
      
       if (pData)
       {
             fread(pData, 1, dwRawSize, in);
           
             for(i=0; i < 256; i++)
             {
                    rgbPal[i].rgbRed=(BYTE)(i%256);
                    rgbPal[i].rgbGreen=rgbPal[i].rgbRed;
                    rgbPal[i].rgbBlue=rgbPal[i].rgbRed;
                    rgbPal[i].rgbReserved=0;
             }
            
             fwrite((char *)&file_h, 1, sizeof(BITMAPFILEHEADER), out);
             fwrite((char *)&info_h, 1, sizeof(BITMAPINFOHEADER), out);
             fwrite((char *)rgbPal, 1, sizeof(rgbPal), out);
             lCount=dwRawSize;
            
             for(lCount-=(long)info_h.biWidth; lCount >= 0; lCount-=(long)info_h.biWidth)
             {
                    fwrite((pData+lCount), 1, (long)dwLine, out);
             }
            
             free(pData);
       }
 
       fclose(in);
       fclose(out);
 
       return 1;
}
 
int main(int argc, char **argv)
{
    char szRawName[80];
    char szBmpName[80];
    DWORD  nWidth, nHeight;
 
    printf("RAW File Name ? ");
    gets(szRawName);
    fflush(stdin);
    printf("BMP File Name ? ");
    gets(szBmpName);
    fflush(stdin);
    printf("Raw Width ? ");
    scanf("%lu",&nWidth);
    printf("Raw Height ? ");
    scanf("%lu",&nHeight);
 
    Gray_Raw2Bmp(szRawName, nWidth, nHeight, szBmpName);
 
    return 0;
}

2009/11/22 20:02 2009/11/22 20:02
Article tag list Go to top
View Comment 1
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
From. 구차니 2009/11/24 11:06
답글달기삭제
그레이 비트맵은.. 비트맵이더라구요 ㅎ
PREV : [1] : NEXT
 
 
 
 
: [1][2][3][4][5][6][7][8] ... [10] :
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
전체 (1323)
출판 준비 (0)
My-Pro... (41)
사는 ... (933)
블로그... (22)
My Lib... (32)
게임 ... (23)
개발관... (3)
Smart ... (1)
Delphi (93)
C Builder (0)
Object... (0)
VC, MF... (10)
Window... (1)
Open API (3)
Visual... (0)
Java, JSP (2)
ASP.NET (0)
PHP (6)
Database (12)
리눅스 (29)
Windows (25)
Device... (1)
Embedded (1)
게임 ... (0)
Web Se... (2)
Web, S... (21)
잡다한... (7)
프로젝트 (0)
Personal (0)
대통령... (13)
Link (2)