我仍在学习WinAPI及其各种库,现在我正在努力弄清楚GDI+。作为一个简单的测试,我试图从文件中加载一个图像并将其绘制到屏幕上。
这是我正在使用的代码(下面的解释):
int x=0, y=0;
Image* sprite=Image::FromFile((WCHAR*)"MyImage.png");
Graphics g(dc);
std::cout<<"(x, y)=("<<x<<", "<<y<<")"<<std::endl; // Debug output
std::cout<<"(w, h)=("<<sprite->GetWidth()<<", "<<sprite->GetHeight()<<")"<<std::endl; // Debug output
g.DrawImage(sprite, x, y, (int)sprite->GetWidth(), (int)sprite->GetHeight());
所以dc是我绘制的HDC,通过BeginPaint()获得。这绝对很好,因为我可以用HDC用ellipse()画一个椭圆,它显示得很好。我已经输出了sprite变量的值,它是一个非空指针,应该是这样的
奇怪的是,上面的输出显示图像的宽度和高度都为0。是什么原因造成的?我想可能是图像加载不正确,所以我尝试为FromFile()参数同时使用绝对路径和相对路径,但没有任何变化。我也试着从PNG转换成BMP,但也没有改变。
怎么回事?
EDIT刚刚测试,如果我将图像加载为image*sprite=new image(L"Path_To_image");它运行良好。为什么它不适用于FromFile?
Gdiplus需要Image::FromFile
等方法使用Unicode字符串。
然而,在您的代码中,您正在传递一个多字节字符串。简单地转换为WCHAR*
是不足以将字符串转换为Unicode的——您需要在它前面加上L
(然后应该删除转换,这是不必要的)。