IMG_Load() 与 jpg returns "unsupported image format"
IMG_Load() with jpg returns "unsupported image format"
我正在尝试使用 SDL2-image 加载图像,当我尝试加载 .png 时它可以工作,但无法识别 .jpg
我的导入:
#include <SDL2/SDL.h>
#undef main
#include <SDL2/SDL_image.h>
#include "logger.hpp"
还有我的代码:
int main(int argc, char **argv) {
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
logger::Log(logger::DEBUG, "Could not initialize SDL (%s)", SDL_GetError());
}
int flags = IMG_INIT_JPG | IMG_INIT_PNG;
int initRes = IMG_Init(flags);
if (initRes & flags != flags) {
logger::Log(logger::DEBUG, "IMG_Init: Failed to init required jpg and png support!");
logger::Log(logger::DEBUG, "IMG_Init: %s", IMG_GetError());
}
else logger::Log(logger::DEBUG, "JPG AND PNG SUPPORTED");
SDL_Surface* surface = IMG_Load("image.jpg");
if (!surface) {
logger::Log(logger::DEBUG, "surface error: %s", IMG_GetError());
}
else {
logger::Log(logger::DEBUG, "LOADED");
}
...
}
这给了我
JPG AND PNG SUPPORTED
surface error: Unsupported image format
通过vcpkg安装集成了:SDL2-image, libjpeg-turbo, libpng 和 zlib,所以我基本不知道为什么会这样
由于运算符优先级,initRes & flags != flags
等同于 initRes & (flags != flags)
,后者始终为假。您需要改用 (initRes & flags) != flags
。
Jpeg 支持是一项可选功能,您需要启用 libjpeg-turbo
。
我正在尝试使用 SDL2-image 加载图像,当我尝试加载 .png 时它可以工作,但无法识别 .jpg
我的导入:
#include <SDL2/SDL.h>
#undef main
#include <SDL2/SDL_image.h>
#include "logger.hpp"
还有我的代码:
int main(int argc, char **argv) {
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
logger::Log(logger::DEBUG, "Could not initialize SDL (%s)", SDL_GetError());
}
int flags = IMG_INIT_JPG | IMG_INIT_PNG;
int initRes = IMG_Init(flags);
if (initRes & flags != flags) {
logger::Log(logger::DEBUG, "IMG_Init: Failed to init required jpg and png support!");
logger::Log(logger::DEBUG, "IMG_Init: %s", IMG_GetError());
}
else logger::Log(logger::DEBUG, "JPG AND PNG SUPPORTED");
SDL_Surface* surface = IMG_Load("image.jpg");
if (!surface) {
logger::Log(logger::DEBUG, "surface error: %s", IMG_GetError());
}
else {
logger::Log(logger::DEBUG, "LOADED");
}
...
}
这给了我
JPG AND PNG SUPPORTED
surface error: Unsupported image format
通过vcpkg安装集成了:SDL2-image, libjpeg-turbo, libpng 和 zlib,所以我基本不知道为什么会这样
由于运算符优先级,initRes & flags != flags
等同于 initRes & (flags != flags)
,后者始终为假。您需要改用 (initRes & flags) != flags
。
Jpeg 支持是一项可选功能,您需要启用 libjpeg-turbo
。