VISUAL C++통해서 24비트 트루 칼라를 8비트 칼라로 바꿔서 페인트샾으로 영상을 확인 하는 프로그램을 만들고 싶은데

일단 24비트 영상데이터를 잘 꺼냈고 파일헤드랑 영상정보헤드 구조체 변수 선언 함 다음에 구조체를 통해서 팔레트를 구현했는데

그다음에 어떻게 해서 팔레트를 통해서 24비트를 8비트로 줄여야  될지 모르겠어 ㅠ 밑에는 지금 까지 짠 소스인데 맞게 한거 같은데

틀린점이 있다면 지적좀 해주고 앞으로 어떻게 구성해야 8비트로 바꿀수 잇을지 소스 아니면 힌트좀 줘 형들 ㅠㅠ

#include<stdio.h>
#include<Windows.h>

#define BYTE unsigned char
#define WIDTHBYTES(bits) ((bits)+31/32*4)

typedef struct tagRGBQUAD{
 BYTE         rgbBlue;
 BYTE         rgbGreen;
 BYTE         rgbRde;
 BYTE         rgbReserved1;

}RGBQUAD;

void main()
{
 FILE *infile;
 infile = fopen("ci.bmp", "rb");
 if (infile == NULL){ printf("파일이 없습니다.\n"); return; };

 BITMAPFILEHEADER hf;
 fread(&hf, sizeof(BITMAPCOREHEADER), 1, infile);
 if (hf.bfType != 0x4D42) exit(1);

 BITMAPINFOHEADER hInfo;
 fread(&hInfo, sizeof(BITMAPINFOHEADER), 1, infile);

 if (hInfo.biBitCount < 8){ printf("좋지 못한 파일 형식!!"); return; }

 BYTE *lpImg = new BYTE[hInfo.biSizeImage];
 fread(lpImg, sizeof(char), hInfo.biSizeImage, infile);
 fclose(infile);

 int rwsize = WIDTHBYTES(hInfo.biBitCount*hInfo.biWidth);
 int rwsize2 = WIDTHBYTES(24*hInfo.biWidth);
 BYTE *lpOutImg = new BYTE[3 * rwsize2*hInfo.biHeight];


 
 if (hInfo.biBitCount == 8)
 if (hInfo.biClrUsed != 0)
 {
  RGBQUAD *pRGB;

  pRGB = new RGBQUAD[hInfo.biClrUsed];
  fread(pRGB, sizeof(RGBQUAD),hInfo.biClrUsed,infile);
 }