#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
FILE *fp = NULL;
int inwidth,inheight,insize, plt_count;
// 赤
fopen_s(&fp, "赤rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
inwidth = bmih.biWidth;
inheight = bmih.biHeight;
insize = inwidth * inheight;
plt_count = (!bmih.biClrUsed)?256:bmih.biClrUsed ;
RGBQUAD* r_plt ;
unsigned char* red;
r_plt = new RGBQUAD[plt_count] ;
red = new unsigned char[insize];
fread( r_plt , sizeof(RGBQUAD), plt_count , fp );
fread(red, insize, 1, fp);
fclose(fp);
// 緑
fopen_s(&fp, "緑rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
plt_count = (!bmih.biClrUsed)?256:bmih.biClrUsed ;
RGBQUAD* g_plt ;
unsigned char* green;
g_plt = new RGBQUAD[plt_count] ;
green = new unsigned char[insize];
fread( g_plt , sizeof(RGBQUAD), plt_count , fp );
fread(green, insize, 1, fp);
fclose(fp);
// 青
fopen_s(&fp, "青rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
plt_count = (!bmih.biClrUsed)?256:bmih.biClrUsed ;
RGBQUAD* b_plt ;
unsigned char* blue;
b_plt = new RGBQUAD[plt_count] ;
blue = new unsigned char[insize];
fread( b_plt , sizeof(RGBQUAD), plt_count , fp );
fread(blue, insize, 1, fp);
fclose(fp);
// 24bitビットマップで保存する
RGBTRIPLE* rgbrec;
rgbrec = new RGBTRIPLE[insize];
for (int a=0; a<insize; a++)
{
rgbrec[a].rgbtRed = r_plt[red[a]].rgbRed ;
rgbrec[a].rgbtGreen = g_plt[green[a]].rgbGreen ;
rgbrec[a].rgbtBlue = b_plt[blue[a]].rgbBlue ;
}
bmfh.bfType = 0x4D42;
bmfh.bfSize = 54+sizeof(RGBTRIPLE)*insize;
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfOffBits = 54;
bmih.biSize = 40;
bmih.biWidth = inwidth;
bmih.biHeight = inheight;
bmih.biPlanes = 1;
bmih.biBitCount = 24;
bmih.biCompression = 0;
bmih.biSizeImage = sizeof(RGBTRIPLE)*insize;
bmih.biXPelsPerMeter = 0;
bmih.biYPelsPerMeter = 0;
bmih.biClrUsed = 0;
bmih.biClrImportant = 0;
fopen_s(&fp, "rec「RGB」.bmp" , "wb" );
fwrite( &bmfh , sizeof(BITMAPFILEHEADER) , 1 , fp );
fwrite( &bmih , sizeof(BITMAPINFOHEADER) , 1 , fp );
fwrite( rgbrec , sizeof(RGBTRIPLE) , insize , fp );
fclose( fp );
delete [] red ;
delete [] r_plt ;
delete [] green ;
delete [] g_plt ;
delete [] blue ;
delete [] b_plt ;
delete [] rgbrec ;
return 0;
}