c언어로 raw파일을 bmp로 바꾸려고 하는데 오류가 나네요 ㅠ 어디가 문제인지 찾지못하겠어요ㅜ
부탁드리겠습니다.ㅜㅜ
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
struct RGB{
BYTE r;
BYTE g;
BYTE b;
};
BYTE image[512][512];
int main()
{
FILE *fp;
FILE *fp1;
int imageW = 512;
int imageH = 512;
int storeW = imageW;
RGB image[512][512];
BITMAPFILEHEADER bh;
BITMAPINFOHEADER bInfo;
int i = 0;
RGBQUAD rgb;
unsigned char *image[1000];
fp = fopen("lena.raw", "rb");
if (fp == NULL)
{
printf("open lena.raw failed\n");
return 0;
}
for (i = 0; i<512; i++)
{
image[i] = malloc(512);
fread(image[i], 1, 512, fp);
}
fclose(fp);
fp1 = fopen("f:\\new.bmp", "wb");
if (fp1 == NULL)
{
printf("open new.bmp failed\n");
return 0;
}
if (storeW % 4 != 0)
{
storeW += (4 - storeW % 4);//
}
bh.bfType = ((WORD)('M' << 8) | 'B');
bh.bfReserved1 = 0;
bh.bfReserved2 = 0;
bh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256 + storeW*imageH;
bh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256;
bInfo.biSize = sizeof(BITMAPINFOHEADER);
bInfo.biWidth = imageW;
bInfo.biHeight = imageH;
bInfo.biPlanes = 1;
bInfo.biBitCount = 8;
bInfo.biCompression = BI_RGB;
bInfo.biSizeImage = storeW*imageH;
bInfo.biXPelsPerMeter = 0;
bInfo.biYPelsPerMeter = 0;
bInfo.biClrUsed = 256;
bInfo.biClrImportant = 0;
fwrite(&bh, sizeof(BITMAPFILEHEADER), 1, fp1);
fwrite(&bInfo, sizeof(BITMAPINFOHEADER), 1, fp1);
rgb.rgbReserved = 0;
for (i = 0; i<256; i++)
{
rgb.rgbBlue = rgb.rgbRed = rgb.rgbGreen = i;
fwrite(&rgb, sizeof(RGBQUAD), 1, fp1);
}
for (i = 0; i<256; i++)
{
fwrite(image[511 - i], 1, 512, fp1);
}
fclose(fp1);
return 0;
}
|