使用GDI+位图

3

我正在使用GDI+ Bitmap类将IStream转换为HBITMAP。我已在链接器输入中包含了gliplus lib文件,并且在构建路径中也有dll文件。但是使用以下语句时:

Bitmap bm(lpStream,FALSE);

出现错误:C2065: 'Bitmap' : 未声明的标识符

请问有人可以告诉我在这里我做错了什么吗。

谢谢。

编辑
我已经在我的实现中包含了适当的头文件(gdiplus.h),并且我可以通过选择上下文菜单中的“转到定义”选项来查看Bitmap的定义。

2个回答

3
除了命名空间问题外,使用Gdiplus还需要在使用之前初始化该库:
ULONG_PTR gdiplusToken;
GdiplusStartupInput startupInput;
GdiplusStartup(&gdiplusToken, &startupInput, 0);

在使用Gdiplus时,您需要保留令牌,直到完成使用,然后释放它:

GdiplusShutdown(gdiplusToken);

如果没有初始化库,Gdiplus操作将会失败并返回错误信息GdiplusNotInitialized。

2
您还需要包含相关的头文件。猜测可能会有一个名为“Bitmap.h”或“gdi+.h”的文件。
这里可以找到更多关于Bitmap类的详细信息。正确的头文件是“gdiplus.h”。简而言之:
#include "gdiplus.h"

Constructor Information
Stock Implementation  gdiplus.dll
Header    Declared in Gdiplusheaders.h, include gdiplus.h
Import library    gdiplus.lib
Minimum availability  GDI+ 1.0
Minimum operating systems  Windows 98/Me, Windows XP, Windows 2000,

Windows NT 4.0 SP6

在 MSDN 的表格中,当它说“Header”时,这告诉您需要包含的头文件的名称。你已经涵盖了“Import Library”。如果你错过了它,你会得到一个链接错误。
编辑: 在这篇关于入门 GDI+ 的文章中,看起来有一个名为“Gdiplus”的命名空间需要指定。可以使用“using namespace Gdiplus”,也可以显式地指定命名空间。
#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;

VOID OnPaint(HDC hdc)
{
   Graphics graphics(hdc);
   Pen      pen(Color(255, 0, 0, 255));
   graphics.DrawLine(&pen, 0, 0, 200, 100);
}

嗨。我已经在类中包含了gdiplus.h。Visual Studio也打开了类的定义,所以我知道头文件被识别了。但它仍然无法编译。 - lostInTransit
你是将它包含在源文件中还是预编译头文件(stdafx.h)中?如果是后者,你需要重新构建预编译头文件。 - 1800 INFORMATION
我都做了,以保险起见。而且我进行了一次干净的构建。 - lostInTransit
你应该检查命名空间是否存在,或者可能需要定义预定义的预处理器符号? - 1800 INFORMATION
有一个名为“Gdiplus”的命名空间。 - 1800 INFORMATION
我正在使用vc++进行工作。虽然我已经包含了头文件。 - lostInTransit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接