gpt4 book ai didi

c++ - 如何正确地重新创建之前由 CreateFileMapping() 共享的 BITMAP?

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:41 26 4
gpt4 key购买 nike

亲爱的 friend ,我需要你的帮助。

我需要使用 MMF(内存映射文件)将 .bmp 文件发送到另一个进程(对话框)并在那里显示它但问题是图像以相反的颜色和上下颠倒的方式显示。

这是源代码:

在第一个应用程序中,我从 HDD 打开图片并将其链接到名为“Gigabyte_picture”的 MMF

HANDLE hFile = CreateFile("123.bmp", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, "Gigabyte_picture");

在第二个应用程序中,我打开映射的 bmp 文件,最后我使用 SendMessage 函数在静态组件上显示 m_HBitmap。

HANDLE hMappedFile = OpenFileMapping(FILE_MAP_READ, FALSE, "Gigabyte_picture");
PBYTE pbData = (PBYTE) MapViewOfFile(hMappedFile, FILE_MAP_READ, 0, 0, 0);

BITMAPINFO bmpInfo = { 0 };
LONG lBmpSize = 60608; // size of the bmp file in bytes

bmpInfo.bmiHeader.biBitCount = 32;
bmpInfo.bmiHeader.biHeight = 174;
bmpInfo.bmiHeader.biWidth = 87;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biSizeImage = lBmpSize;
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

UINT * pPixels = 0;
HDC hDC = CreateCompatibleDC(NULL);

HBITMAP m_HBitmap = CreateDIBSection(hDC, &bmpInfo, DIB_RGB_COLORS, (void **)& pPixels, NULL, 0);
SetBitmapBits(m_HBitmap, lBmpSize, pbData);
SendMessage(gStaticBox, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP,(LPARAM)m_HBitmap);
/////////////
HWND gStaticBox = CreateWindowEx(0, "STATIC","",
SS_CENTERIMAGE | SS_REALSIZEIMAGE | SS_BITMAP | WS_CHILD | WS_VISIBLE,
10,10,380, 380, myDialog, (HMENU)-1,NULL,NULL);

最佳答案

pbData 指向位图数据的开始,指向位图头。将 SetBitmapBits 指针指向原始数据:pbData + header size + optional palette。

关于c++ - 如何正确地重新创建之前由 CreateFileMapping() 共享的 BITMAP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493372/

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