怎么将小图拼接成一个超大图(无大小限制)

如何将小图拼接成一个超大图(无大小限制)?
1.我现在的做法是在内存中建立一个CreateCompatibleBitmap(hdc,5000,5000);
然后将小图复制到这上面,再生成一个BMP文件.生成的算法如下:
int   SaveBitmapToFile(HBITMAP   hBitmap,   const   char   *lpFileName)
{
HDC   hDC;   //设备描述表      
int   iBits;   //当前显示分辨率下每个像素所占字节数      
WORD   wBitCount;   //位图中每个像素所占字节数      
        wBitCount=24;

//定义调色板大小,位图中像素字节大小,位图文件大小,写入文件字节数      
DWORD   dwPaletteSize=0;      
DWORD   dwBmBitsSize;      
DWORD   dwDIBSize,       dwWritten;      
       
BITMAP   Bitmap;                                                       //位图属性结构      
BITMAPFILEHEADER   bmfHdr;                                   //位图文件头结构      
BITMAPINFOHEADER   bi;                                           //位图信息头结构          
LPBITMAPINFOHEADER   lpbi;                                   //指向位图信息头结构      
       
HANDLE   fh,hDib,hPal,hOldPal=NULL;   //定义文件,分配内存句柄,调色板句柄      
       
//计算位图文件每个像素所占字节数      
hDC=   CreateDC( "DISPLAY ",NULL,NULL,NULL);      
iBits=GetDeviceCaps(hDC,BITSPIXEL)   *   GetDeviceCaps(hDC,PLANES);      
DeleteDC(hDC);      
       
       
//设置位图信息头结构      
GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&Bitmap);      
bi.biSize=sizeof(BITMAPINFOHEADER);      
bi.biWidth=Bitmap.bmWidth;      
bi.biHeight=Bitmap.bmHeight;      
bi.biPlanes=1;      
bi.biBitCount=wBitCount;      
bi.biCompression=BI_RGB;      
bi.biSizeImage=0;      
bi.biXPelsPerMeter=0;      
bi.biYPelsPerMeter=0;      
bi.biClrUsed=0;      
bi.biClrImportant=0;      
       
dwBmBitsSize=((Bitmap.bmWidth*wBitCount+31)/32)*4*Bitmap.bmHeight;      
       
//为位图内容分配内存      
hDib=GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));      
lpbi=(LPBITMAPINFOHEADER)GlobalLock(hDib);      
*lpbi=bi;      
       
//处理调色板                  
hPal=GetStockObject(DEFAULT_PALETTE);      
if(hPal)      
{
hDC=GetDC(NULL);      
hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE);      
RealizePalette(hDC);      
}      
       
//获取该调色板下新的像素值      
GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,