现在有一个对话框,我通过图像采集卡将相机采集到的图像实时显示在了对话框上,图像的位置是已知的,假设是(0,0,500,500)。现在想将图像暂停后的瞬时图片保存为256色的BMP图像。求助。

解决方案 »

  1.   

    采集卡的SDK有相关的函数,至少会有一个转24位bmp的函数,自己再转下就可以
      

  2.   


    // lpszFileName:文件名
    // saveDC:图片DC
    // rc:图片大小
    BOOL Save( LPCTSTR lpszFileName, HDC saveDC, RECT rc ) 

    BITMAPFILEHEADER bf = { 0 }; 
    BITMAPINFOHEADER bi = { 0 }; 
    HDC hMemDC; 
    HBITMAP hBitmap; 
    LPBYTE lpBits;  bi.biSize = sizeof( BITMAPINFOHEADER ); 
    bi.biBitCount = 24; // 保存为true color 
    bi.biWidth = rc.right - rc.left; 
    bi.biHeight = rc.bottom - rc.top; 
    bi.biPlanes = 1; 
    bi.biCompression = BI_RGB; 
    bi.biSizeImage = WIDTHBYTES( bi.biWidth, bi.biBitCount ) * bi.biHeight;  HDC hdc = GetDC(NULL); 
    if( !hdc )
    {
    return FALSE; 
    }
    hBitmap = CreateDIBSection( hdc, ( CONST BITMAPINFO * )&bi, DIB_RGB_COLORS,( VOID ** )&lpBits, NULL, 0 ); 
    if( !hBitmap )

    ReleaseDC(NULL,hdc); 
    return FALSE; 
    }  hMemDC = CreateCompatibleDC( hdc ); 
    HBITMAP hOldBmp = ( HBITMAP )SelectObject( hMemDC, hBitmap ); 
    BitBlt( hMemDC, 0, 0, bi.biWidth, bi.biHeight, saveDC, rc.left, rc.top, SRCCOPY ); 
    SelectObject( hMemDC, hOldBmp ); 
    ReleaseDC( NULL, hdc ); 
    DeleteDC( hMemDC );  bf.bfType = 0x4d42; 
    bf.bfSize = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) 
    + bi.biSizeImage; 
    bf.bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );  DWORD dwWrite; 
    HANDLE fh = CreateFile( lpszFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 
    FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL ); 
    WriteFile( fh, ( LPBYTE )&bf, sizeof( BITMAPFILEHEADER ), &dwWrite, NULL ); 
    WriteFile( fh, ( LPBYTE )&bi, sizeof( BITMAPINFOHEADER ), &dwWrite, NULL ); 
    WriteFile( fh, ( LPBYTE )lpBits, bi.biSizeImage, &dwWrite, NULL ); 
    DeleteObject( hBitmap ); 
    return TRUE; 
    }调用示例: RECT rc;
    rc.bottom = bm.bmHeight;
    rc.left = 0;
    rc.right = bm.bmWidth;
    rc.top = 0;
    Save(_T("C:\\A.BMP"),memdc,rc);
      

  3.   

    可是我现在是从摄像头里采集来的图像,哪来的hdc或者图像指针啊???
      

  4.   

    HBITMAP hBitmap = .....;
    HBITMAP hOldBmp = (HBITMAP)::SelectObject(memdc,hBitmap);//将上面创建的位图选入内存DC中,返回Bitmap的指针并赋给hOldBmp
      

  5.   


    HBITMAP    hBitmap = .....;
    HBITMAP hOldBmp = (HBITMAP)::SelectObject(memdc,hBitmap);//将上面创建的位图选入内存DC中,返回Bitmap的指针并赋给hOldBmp