gpt4 book ai didi

c++ - 如何在 C++/MFC/GDI 中创建一个非常大的位图

转载 作者:行者123 更新时间:2023-11-30 01:33:04 27 4
gpt4 key购买 nike

我希望能够在 C++ MFC 应用程序中创建一个大的(比如 20,000 x 20,000)像素位图,使用 CDC 派生类写入位图。我已尝试按照 MSDN 文档中的描述使用内存 DC,但这些似乎仅限于与当前显示驱动程序兼容的大小。

我目前正在使用位图打印驱动程序来完成这项工作,但它非常慢并且由于假脱机 GDI 信息而使用了大量的中间存储。

我正在寻找的解决方案不应涉及图元文件或假脱机,因为我正在绘制的模型需要数百万次 GDI 调用才能呈现。

我可以通过多个内存 DC 使用分而治之的方法,但这似乎是一种非常笨重且不优雅的技术。

有什么想法吗?

最佳答案

CDC 和 CBitmap 似乎只支持设备相关的位图,您可能更幸运地使用 ::CreateDIBSection 创建位图,然后将 CBitmap 附加到它。不幸的是,原始 GDI 接口(interface)有点陈旧。

在 32 BPP 下使用 20,000 x 20,000 可能不太幸运,至少在 32 位应用程序中是这样,因为它需要大约 1.5 GB 的内存,但我得到了一个有效的 HBITMAP,返回值为 16 bpp:

BITMAPINFOHEADER bmi = { sizeof(bmi) };
bmi.biWidth = 20000;
bmi.biHeight = 20000;
bmi.biPlanes = 1;
bmi.biBitCount = 16;
HDC hdc = CreateCompatibleDC(NULL);
BYTE* pbData = 0;
HBITMAP hbm = CreateDIBSection(hdc, (BITMAPINFO*)&bmi, DIB_RGB_COLORS, (void**)&pbData, NULL, 0);
DeleteObject(SelectObject(hdc, hbm));

关于c++ - 如何在 C++/MFC/GDI 中创建一个非常大的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/138122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com