C++ SDL图像:无法';t打开图像
不幸的是,我没有得到一张照片,只有一个白色的屏幕。我目前正在学习c++和sdl 错误消息:C++ SDL图像:无法';t打开图像,c++,visual-studio,sdl,C++,Visual Studio,Sdl,不幸的是,我没有得到一张照片,只有一个白色的屏幕。我目前正在学习c++和sdl 错误消息: SDL\u图像错误:无法打开test.jpg 我正在Windows 10计算机上使用Visual Studio #include <SDL.h> #include <SDL_image.h> #include <iostream> #include <windows.h> #include <string> using namespace st
SDL\u图像错误:无法打开test.jpg
我正在Windows 10计算机上使用Visual Studio
#include <SDL.h>
#include <SDL_image.h>
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;;
string ExePath() {
char buffer[MAX_PATH];
GetModuleFileName(NULL, buffer, MAX_PATH);
string::size_type pos = string(buffer).find_last_of("\\/");
return string(buffer).substr(0, pos);
}
int main(int argc, char* args[]) {
cout << "my directory is " << ExePath() << "\n";
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
std::cout << "SDL load fail" << std::endl;
return -1;
}
SDL_Window* window = SDL_CreateWindow("Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 500, 500, SDL_WINDOW_SHOWN);
if (window == NULL) {
std::cout << "Window load fail." << std::endl;
return -1;
}
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
std::cout << "Renderer load fail." << std::endl;
return -1;
}
SDL_Texture* background = IMG_LoadTexture(renderer, "test.jpg");
if (background == NULL) {
printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError());
SDL_Delay(5000);
return -1;
}
SDL_Rect pos;
pos.x = 20;
pos.y = 30;
pos.w = 460;
pos.h = 300;
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, background, NULL, &pos);
SDL_RenderPresent(renderer);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
atexit(SDL_Quit);
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;;
字符串ExePath(){
字符缓冲区[最大路径];
GetModuleFileName(空,缓冲区,最大路径);
字符串::size\u type pos=字符串(缓冲区)。查找(“\\/”)中的最后一个字符串;
返回字符串(缓冲区).substr(0,位置);
}
int main(int argc,char*args[]{
coutSDL Image是一个单独的库。在使用它之前,您应该初始化它。类似于以下内容:
////...
int imgFlags = IMG_INIT_JPG; // or IMG_INIT_PNG;
// not sure about the imgFlags parameter, read the docs.
if( !( IMG_Init( imgFlags ) & imgFlags ) )
{
printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError() );
}
/// the rest is the same...
SDL_Texture* background = IMG_LoadTexture(renderer, "test.jpg");
if (background == NULL) {
printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError());
SDL_Delay(5000);
return -1;
}
/// ...
一些参考资料
编辑:对于“更近一步”:我认为你的延迟是在错误的地方
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, background, NULL, &pos);
SDL_RenderPresent(renderer);
SDL_Delay(5000); //////// For example try putting int here
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
atexit(SDL_Quit);
std::cout << "Bye!" << std::endl;
return 0;
SDL_渲染器(渲染器);
SDL_渲染复制(渲染器、背景、空和位置);
SDL_渲染器呈现(渲染器);
SDL_Delay(5000);//例如,尝试在此处输入int
SDL_渲染器(渲染器);
SDL_窗口(窗口);
脱欧(SDL_退出);
std::这可能与它是一个jpg
有关吧。如果你将它转换成png
它能工作吗?谢谢你的帮助。是的,我尝试了png,但它不工作。可执行文件的目录不是我们通常所说的。相对路径是相对于CWD的。你可能希望以“正确”启动进程工作目录,通过进程本身更改工作目录(chdir
),或使用文件的绝对路径。首先,请使用getcwd
/GetCurrentDirectory
检查您的工作目录是否符合预期。是否使用绝对路径进行了尝试?您是如何指定绝对路径的?谢谢!更近了一步!现在我没有收到有关图片的错误消息。我只在窗口中看到一个黑色的sc请参阅上面的更新!如果这不起作用,请用更新版本的代码展开您的问题。