C++ WIN API C++;写入文件的本地位图资源不可查看
我试图在VisualStudioC++中编写一个本地资源(.bmp)到文件。我已将新的资源类型位图添加到资源中。它的ID是101(如资源.h所示)。我可以成功地找到它并将其保存到文件中,但保存的文件不再是BMP,它的大小与原始文件相同。我在hex editor中看到,写入文件的“头”与我导入到项目中的原始BMP不同。 这是代码,请帮忙谢谢 `C++ WIN API C++;写入文件的本地位图资源不可查看,c++,api,resources,bmp,C++,Api,Resources,Bmp,我试图在VisualStudioC++中编写一个本地资源(.bmp)到文件。我已将新的资源类型位图添加到资源中。它的ID是101(如资源.h所示)。我可以成功地找到它并将其保存到文件中,但保存的文件不再是BMP,它的大小与原始文件相同。我在hex editor中看到,写入文件的“头”与我导入到项目中的原始BMP不同。 这是代码,请帮忙谢谢 ` RT\u位图资源中没有BITMAPFILEHEADER,因此如果要将其保存到磁盘,需要添加该文件。您可以将资源存储为RT\u RCDATA以完全按照文件在
RT\u位图
资源中没有BITMAPFILEHEADER
,因此如果要将其保存到磁盘,需要添加该文件。您可以将资源存储为RT\u RCDATA
以完全按照文件在磁盘上的方式嵌入该文件,但这样您就无法使用LoadImage
之类的函数来读取该文件
这应该满足您的需要:
#include <Windows.h>
int main()
{
WORD wResId = 101;
LPSTR lpszOutputPath = "test.bmp";
HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(wResId) , RT_BITMAP);
HGLOBAL hLoaded = LoadResource(NULL,hrsrc);
LPVOID lpLock = LockResource(hLoaded);
DWORD dwSize = SizeofResource(NULL, hrsrc);
HANDLE hFile = CreateFile (lpszOutputPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD dwByteWritten;
//Write BITMAPFILEHEADER
BITMAPFILEHEADER bfh;
bfh.bfType = 0x4d42;
bfh.bfSize = dwSize + sizeof(BITMAPFILEHEADER);
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bfh.bfReserved1 = bfh.bfReserved2 = 0;
WriteFile(hFile, &bfh, sizeof(bfh), &dwByteWritten , NULL);
WriteFile(hFile, lpLock , dwSize , &dwByteWritten , NULL);
CloseHandle(hFile);
FreeResource(hLoaded);
return 0;
}
#包括
int main()
{
单词wResId=101;
LPSTR lpszOutputPath=“test.bmp”;
HRSRC HRSRC=FindResource(NULL,MAKEINTRESOURCE(wResId),RT\u位图);
HGLOBAL hLoaded=LoadResource(NULL,hrsrc);
LPVOID lpLock=锁资源(已加载);
DWORD dwSize=SizeofResource(NULL,hrsrc);
HANDLE hFile=CreateFile(lpszOutputPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
德沃德·德比泰克;
//写入BITMAPFILEHEADER
位图文件头;
bfh.bfType=0x4d42;
bfh.bfSize=dwSize+sizeof(BITMAPFILEHEADER);
bfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BitMapInfo Header);
bfh.bfReserved1=bfh.bfReserved2=0;
WriteFile(hFile,&bfh,sizeof(bfh),&dwbytewrited,NULL);
WriteFile(hFile、lpLock、dwSize和dwbytewrited,NULL);
闭合手柄(hFile);
免费资源(已加载);
返回0;
}
#include <Windows.h>
int main()
{
WORD wResId = 101;
LPSTR lpszOutputPath = "test.bmp";
HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(wResId) , RT_BITMAP);
HGLOBAL hLoaded = LoadResource(NULL,hrsrc);
LPVOID lpLock = LockResource(hLoaded);
DWORD dwSize = SizeofResource(NULL, hrsrc);
HANDLE hFile = CreateFile (lpszOutputPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD dwByteWritten;
//Write BITMAPFILEHEADER
BITMAPFILEHEADER bfh;
bfh.bfType = 0x4d42;
bfh.bfSize = dwSize + sizeof(BITMAPFILEHEADER);
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bfh.bfReserved1 = bfh.bfReserved2 = 0;
WriteFile(hFile, &bfh, sizeof(bfh), &dwByteWritten , NULL);
WriteFile(hFile, lpLock , dwSize , &dwByteWritten , NULL);
CloseHandle(hFile);
FreeResource(hLoaded);
return 0;
}