给出一张底图,用VC在图像上加文字后保存为指定的文件,处理过程中要求不显示图片直接在后台另外保存图,,急!!!急..
主要是不要显示出来./

解决方案 »

  1.   

    在memDC中绘制并保存为文件?
      

  2.   

      先把你当前显示的位图贴入一个兼容dc,然后在兼容dc里面把文字写上,然后用下面这个函数BOOL CTryView::SaveBmp(HBITMAP hBitmap, const char *pchFileName)
    {
    if(!hBitmap || !pchFileName) return FALSE; HDC hDC;
    int iBits; // µ±Ç°·Ö±æÂÊÏÂÿÏóËØËùÕ¼×Ö½ÚÊý
    WORD wBitCount; //λͼÖÐÿÏóËØËùÕ¼×Ö½ÚÊý
    // ¶¨Òåµ÷É«°å´óС£¬ Î»Í¼ÖÐÏñËØ×Ö½Ú´óС £¬Î»Í¼Îļþ´óС £¬ Ð´ÈëÎļþ×Ö½ÚÊý 
    DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, dwWritten=0;
    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);
    if (iBits <= 1)
    wBitCount = 1; 
    else if (iBits <= 4)
    wBitCount = 4; 
    else if (iBits <= 8)
    wBitCount = 8; 
    else
    wBitCount = 24; 

    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.biClrImportant = 0;
    bi.biClrUsed = 0;

    dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;
    //ΪλͼÄÚÈÝ·ÖÅäÄÚ´æ 
    hDib = GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER)); 
    lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); 
    *lpbi = bi; 
    // ´¦Àíµ÷É«°å  
    if (GetStockObject(DEFAULT_PALETTE)) 
    {
    hDC=::GetDC(NULL);
    hPal=NULL;
    hOldPal=::SelectPalette(hDC, (HPALETTE)hPal, FALSE); 
    RealizePalette(hDC); 
    }
    // »ñÈ¡¸Ãµ÷É«°åÏÂеÄÏñËØÖµ 
    GetDIBits(hDC,hBitmap, 0, 
       (UINT)Bitmap.bmHeight,
           (LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize,
           (BITMAPINFO *)lpbi, 
       DIB_RGB_COLORS);
    if(hOldPal) // »Ö¸´µ÷É«°å 
    {
    ::SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
    RealizePalette(hDC);
    ::ReleaseDC(NULL, hDC);

    fh = CreateFile(pchFileName, // ´´½¨Î»Í¼Îļþ
      GENERIC_WRITE,
      0,NULL, CREATE_ALWAYS,
                  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, 
      NULL);
    if (fh == INVALID_HANDLE_VALUE) return FALSE; 
    // ÉèÖÃλͼÎļþÍ· 
    bmfHdr.bfType = 0x4D42; // "BM"
    bmfHdr.bfSize = dwDIBSize;
    bmfHdr.bfReserved1 = 0;
    bmfHdr.bfReserved2 = 0;
    dwDIBSize = sizeof(BITMAPFILEHEADER) 
      + sizeof(BITMAPINFOHEADER)
          + dwPaletteSize + dwBmBitsSize;

    bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)
                 + (DWORD)sizeof(BITMAPINFOHEADER)
     + dwPaletteSize;
    WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);//дÈëλͼÎļþÍ·
    WriteFile(fh, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);//дÈëλͼÎļþÆäÓàÄÚÈÝ
    GlobalUnlock(hDib);// Çå³ý 
    GlobalFree(hDib);
    CloseHandle(fh);

    return TRUE;
    }
    即可保存为bmp 后台处理