GDI+图形::DrawImage未显示

GDI+ Graphics::DrawImage not showing

本文关键字:显示 DrawImage GDI+ 图形      更新时间:2023-10-16

我仍在学习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(然后应该删除转换,这是不必要的)。