weixin_41703094 2021-01-30 11:52 采纳率: 0%
浏览 0

程序在WIN10下运行正常,win7下发现是复制DDB函数是空白的,高手指教?

void CopyBitmap(HWND hwnd, HBITMAP* Dbmp, const HBITMAP* Sbmp)
{
    char* bits = nullptr;
    static BITMAP bm;
    TCHAR Error[MAX_PATH];
    GetObject(*Sbmp, sizeof(BITMAP), &bm); 
    unsigned bitsize = bm.bmWidthBytes * bm.bmHeight * bm.bmPlanes;
    try
    {
        bits = new char[bitsize];
    }
    catch (const std::exception& e)
    {
        auto len = MultiByteToWideChar(CP_ACP, 0, e.what(), -1, Error, MAX_PATH);
        Error[len] = '\0';  
        MessageBox(hwnd, Error, NULL, MB_OK);
        return;
    }
    GetBitmapBits(*Sbmp, bitsize, bits);
    *Dbmp = CreateBitmapIndirect(&bm);
    SetBitmapBits(*Dbmp, bitsize, bits);
    delete[]bits;    
}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 13:37
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码是在创建一个基于位图的可变大小的Bitmap对象,并将从源位图中提取的位图数据复制到目标位图中。然而,在Win7系统上遇到的问题可能是因为目标位图的宽度或高度小于源位图,或者目标位图没有足够的内存来存储复制的数据。

    以下是一些建议:

    1. 检查目标位图的尺寸是否足够大以包含源位图的所有像素。如果不够,尝试增加目标位图的宽度或高度。

    2. 检查目标位图是否有足够的内存来存储复制的数据。如果目标位图的内存不足以容纳复制的数据,可以考虑使用更小的目标位图,或者考虑使用其他方法来复制位图。

    3. 如果问题仍然存在,请检查代码中的错误处理部分,确保在出现异常时能够正确地显示错误信息。

    4. 如果上述建议都不能解决问题,请提供更多的关于您的环境和具体问题的信息,以便我为您提供更具体的帮助。

    评论

报告相同问题?