C ++将png资源导出到文件

时间:2016-09-02 14:01:43

标签: c++ visual-c++ visual-studio-2015 resources

Visual Studio 2015,控制台应用程序。尝试使用资源。我在资源中添加了一些png图像。如果我从IDE导出图像就没问题。现在我尝试通过c ++做同样的事情;这里是代码

HRSRC myResource = FindResource(NULL, MAKEINTRESOURCE(SEND_MSG_PNG), L"PNG");
if (myResource == NULL)
{
    fatal("Could not locate dialog box.");
    return;
}
DWORD myResourceSize = SizeofResource(NULL, myResource);
log("Resource size %d", myResourceSize);
HGLOBAL myResourceData = LoadResource(NULL, myResource);
if (myResourceData == NULL)
{
    fatal("Could not load dialog box.");
    return;
}
void* lpResLock = LockResource(myResourceData);
if (lpResLock == NULL)
{
    fatal("Could not lock dialog box.");
    return;
}
FILE *fh;
fopen_s(&fh, "d:/test2.png", "w+");
fwrite(lpResLock, myResourceSize, 1, fh);
fclose(fh);

这里的问题就开始了。如果我通过IDE导出这个文件,它的852字节。让我们称它为test.png而test2.png是1041字节。我在HEX编辑器中打开了两个文件。前5个字节相同89 50 4E 47 0D。问题是所有观众都认为test2.png在test.png正常时已损坏。 test.png data test2.png如何解决?

1 个答案:

答案 0 :(得分:1)

在fopen_s中使用模式"wb+",以避免任何文本数据转换(如行结尾修补等)。添加b表示“二进制”。