wjc18145017 2023-02-11 15:09 采纳率: 0%
浏览 9

编译显示函数错误 是个录屏软件 这是什么问题?

我在int main前声明了
可是还是报错

#include <iostream>
#include <Windows.h>
using namespace std;
bool SaveBitmapFile(HDC hdc, PBITMAPINFO pbmi, PBYTE pBits, LPCTSTR lpszFileName);

int main()
{
    // 定义变量
    HDC hdcScreen;
    HDC hdcMemDC = NULL;
    HBITMAP hbmScreen = NULL;
    BITMAP bmpScreen;
    // 获取屏幕DC
    hdcScreen = GetDC(NULL);
    // 创建一个内存DC
    hdcMemDC = CreateCompatibleDC(hdcScreen);
    // 获取屏幕尺寸
    int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    // 创建一个屏幕大小的位图
    hbmScreen = CreateCompatibleBitmap(hdcScreen, nScreenWidth, nScreenHeight);
    // 将位图选入到内存DC中
    SelectObject(hdcMemDC, hbmScreen);
    // 将屏幕DC拷贝到内存DC中
    BitBlt(hdcMemDC, 0, 0, nScreenWidth, nScreenHeight, hdcScreen, 0, 0, SRCCOPY);
    // 从内存DC中获取屏幕图像数据
    GetObject(hbmScreen, sizeof(BITMAP), &bmpScreen);
    // 将图像数据保存到文件中
    SaveBitmapFile(hdcMemDC, &bmpScreen, "screen.bmp");
    // 释放资源
    DeleteObject(hbmScreen);
    DeleteDC(hdcMemDC);
    ReleaseDC(NULL, hdcScreen);
    return 0;
}
// 保存位图文件
bool SaveBitmapFile(HDC hdc, PBITMAPINFO pbmi, PBYTE pBits, LPCTSTR lpszFileName)
{
    HANDLE hf;                 // 文件句柄
    BITMAPFILEHEADER hdr;       // 位图文件头
    PBITMAPINFOHEADER pbih;     // 位图信息头
    LPBYTE lpBits;              // 指向位图数据的指针
    DWORD dwTotal;              // 总字节数
    DWORD cb;                   // 写入文件的字节数
    BYTE *hp;                   // 指向位图数据的指针
    DWORD dwTmp;
    pbih = (PBITMAPINFOHEADER)pbmi;
    lpBits = (LPBYTE)pBits;
    // 计算位图文件大小
    dwTotal = pbih->biSizeImage + sizeof(BITMAPFILEHEADER) + pbih->biSize +
              pbih->biClrUsed * sizeof(RGBQUAD);
    // 为位图文件头填充数据
    hdr.bfType = 0x4d42;        // bfType为"BM"
    hdr.bfSize = dwTotal;       // bfSize为文件大小
    hdr.bfReserved1 = 0;        // bfReserved1和bfReserved2都为0
    hdr.bfReserved2 = 0;
    hdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + pbih->biSize +
                    pbih->biClrUsed * sizeof (RGBQUAD);
    // 创建位图文件
    hf = CreateFile(lpszFileName, GENERIC_READ | GENERIC_WRITE,
                    (DWORD)0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
                    (HANDLE)NULL);
    if (hf == INVALID_HANDLE_VALUE)
        return FALSE;
    // 将位图文件头写入文件
    WriteFile(hf, (LPVOID)&hdr, sizeof(BITMAPFILEHEADER), (LPDWORD)&dwTmp, NULL);
    // 将位图信息头和调色板写入文件
    WriteFile(hf, (LPVOID)pbih, sizeof(BITMAPINFOHEADER) + pbih->biClrUsed *
              sizeof (RGBQUAD), (LPDWORD)&dwTmp, ( NULL));
    // 将位图数据写入文件
    dwTotal = cb = pbih->biSizeImage;
    hp = lpBits;
    WriteFile(hf, (LPSTR)hp, (int)cb, (LPDWORD)&dwTmp,NULL);
    // 关闭文件
    CloseHandle(hf);
    return TRUE;
}

编译器显示:
第29行    第54列    D:\桌面\348.cpp    [Error] cannot convert 'BITMAP* {aka tagBITMAP*}' to 'PBITMAPINFO {aka tagBITMAPINFO*}' for argument '2' to 'bool SaveBitmapFile(HDC, PBITMAPINFO, PBYTE, LPCTSTR)'

img


请问这是什么问题?
这是个录屏软件

  • 写回答

1条回答 默认 最新

  • 元气少女缘结神 2023-02-11 15:26
    关注

    类型不一样,你给第二个参数传的实参是BITMAP * ,但它要的是PBITMAPINFO。而且函数要4个参数,你只传了3个

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 2月11日

悬赏问题

  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振