GDI + Graphics :: DrawImage没有显示

时间:2014-03-03 01:07:00

标签: c++ winapi graphics gdi+ gdi

仍在努力通过倾向于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用椭圆()绘制一个椭圆,它显示得很好。我输出了sprite变量的值,它应该是非空指针。

奇怪的是,上面的输出表示图像的宽度和高度均为0.会导致什么?我想也许图像没有正确加载,所以我尝试使用FromFile()参数的绝对路径和相对路径,并且没有任何改变。我也试过从PNG切换到BMP,但也没有改变。

发生了什么事?

编辑刚刚测试过,如果我将图片加载为Image * sprite = new Image(L“Path_To_Image”);它工作正常。为什么它不适用于FromFile?

1 个答案:

答案 0 :(得分:3)

Gdiplus期望使用Image::FromFile等方法的Unicode字符串。

但是在您的代码中,您传递的是多字节字符串。简单地转换为WCHAR*并不足以将字符串转换为Unicode - 您需要在其前面添加L(然后您应该删除强制转换,这是不必要的)。