求助!!JPG叠加字符的问题
我想把硬盘下的JPG文件叠加上字符后再保存回去,网上查了下,一般都是说把JPG转成BMP,叠加完之后再转回JPG,我用了如下代码:bWorking=finder.FindNextFile();
strFileTitle=finder.GetFileTitle();
strpath=finder.GetFilePath();
CImage imgTransfer;
imgTransfer.Load(strpath);
strpath.Format( _T( "C:\\%s.bmp" ), strFileTitle);
imgTransfer.Save(strpath);
//////////////////////转成BMP
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,strpath,0,0,0,LR_LOADFROMFILE);
MemDC.SelectObject(hBitmap);
MemDC.TextOutW(1,1,strFileTitle);
WORD wbitsCount;
DWORD dwpalettelsize=0;
DWORD dwbmdibitsize,dwdibsize,dwwritten;
BITMAP bitmap;
BITMAPFILEHEADER bmfhdr;
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
HANDLE fh,fdib;
GetObject(hBitmap,sizeof(BITMAP),(void *)&bitmap);
wbitsCount=bitmap.bmBitsPixel;
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=bitmap.bmWidth;
bi.biHeight=bitmap.bmHeight;
bi.biPlanes=1;
bi.biBitCount= bitmap.bmBitsPixel ;
bi.biClrImportant=0;
bi.biClrUsed=0;
bi.biCompression=BI_RGB;
bi.biSizeImage=0;
bi.biYPelsPerMeter=0;
bi.biXPelsPerMeter=0;
if(wbitsCount<=8)dwpalettelsize=(1<<wbitsCount)*sizeof(RGBQUAD);
dwbmdibitsize=((bitmap.bmWidth*wbitsCount+31)/8)*bitmap.bmHeight;
fdib=GlobalAlloc(GHND,dwbmdibitsize+dwpalettelsize+sizeof(BITMAPINFOHEADER));
lpbi=(LPBITMAPINFOHEADER)::GlobalLock(fdib);
*lpbi=bi;//将bi中的数据写入分配的内存中。
HDC hdc=::GetDC(NULL);
GetDIBits(hdc,hBitmap,0,(UINT)bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwpalettelsize,(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
fh=CreateFile(strpath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
if(fh==INVALID_HANDLE_VALUE)
bmfhdr.bfType=0x4d42;
dwdibsize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwbmdibitsize+dwpalettelsize;
bmfhdr.bfSize=dwdibsize;
bmfhdr.bfReserved1=0;
bmfhdr.bfReserved2=0;
bmfhdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwpalettelsize;
WriteFile(fh,(LPSTR)&bmfhdr,sizeof(BITMAPFILEHEADER),&dwwritten,NULL);
WriteFile(fh,(LPSTR)lpbi,dwdibsize,&dwwritten,NULL);
::GlobalUnlock(fdib);
::GlobalFree(fdib);
::CloseHandle(fh);
//////////////////////叠加字符
imgTransfer.Load(strpath);
strpath.Format( _T( "C:\\%s.jpg" ), strFileTitle);
imgTransfer.Save(strpath);
////////////////////////转回JPG
一共是3段,每段单独使用都没问题,可是放在一起就不行了,请问是什么原因?