我试图读取我的PNG图像文件来创建一个精灵。我使用以下代码来阅读和绘制图像:
wchar_t filename = L'bunny.png';
wchar_t* path2 = &filename;
Image image = Image(path2, false);
Image* pImage = ℑ
Graphics graphics(pImage);
graphics.DrawImage(pImage, 10, 60);
但是编译器告诉我:
错误C2248。'Gdiplus::Image::Image':无法访问类“Gdiplus::Image”中声明的私有成员
我尝试使用Image类的公共部分的构造函数,但它被识别为私有部分的构造函数。
Image image = Image(IN path2, false);
有没有人能给我看一段能在这种情况下工作的代码?
3条答案
按热度按时间fafcakar1#
看起来重载解析正在接管这里,因为您没有向构造函数提供正确的类型。值得注意的是,
false
不是BOOL
类型。类型为bool
。您应该使用FALSE
。虽然
BOOL
是整数类型,而bool
可以隐式转换为int
,但这可能足以混淆编译器。重载解析系统可能会在尝试转换bool
之前优先选择具有更好匹配签名的私有构造函数。你实际需要的构造函数是:
因此,您可以简单地这样做(注意第二个参数已经默认为FALSE):
如果你想把路径存储在一个变量中,在评论部分已经指出了你做错了。您尝试使用多值字符文字,然后将其视为以NULL结尾的字符串。这是非常不正确的。
相反,使用
const WCHAR*
或简称LPCWSTR
:6ojccjat2#
您遇到的错误是由于Gdiplus::Image类构造函数的使用不正确。构造函数需要一个指向
const WCHAR
的指针作为第一个参数,但您提供的是一个指向单个wchar_t
的指针。此外,构造函数中没有第二个参数。下面是正确的代码:
请注意,您应该在使用Gdiplus之前对其进行初始化,并在完成后将其关闭。
jrcvhitl3#
该错误是因为您正在创建临时
Image
并将其复制到另一个Image
。复制构造函数是私有的,因为Image
不能被复制。你必须使用C17之前的编译器,因为C17和更高版本已经为你消除了临时编译器。所以,你将不得不简单地摆脱它自己,即改变这:
改为:
另外,您的
filename
和path
变量设置错误。它们应该更像这样:最后,你不需要那么多冗余的局部变量:
话虽如此,你为什么要在自己身上画一个PNG?您在评论中提到您不知道如何将
Graphic
对象链接到窗口。Graphic
的构造函数接受HWND
或HDC
作为输出。它也有静态FromHWND()
和FromHDC()
方法。