仍在努力通过倾向于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?
答案 0 :(得分:3)
Gdiplus期望使用Image::FromFile
等方法的Unicode字符串。
但是在您的代码中,您传递的是多字节字符串。简单地转换为WCHAR*
并不足以将字符串转换为Unicode - 您需要在其前面添加L
(然后您应该删除强制转换,这是不必要的)。