GDI+图形::DrawImage未显示
GDI+ Graphics::DrawImage not showing
我仍在学习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
(然后应该删除转换,这是不必要的)。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 显示基于用户输入的整数的字符
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 密码登录程序将永远循环并显示不正确的结果
- GDI+图形::DrawImage未显示