-2

我正在尝试使用 SDL 2.0.1、SDL Image 2.0.0 和 c++ 显示 png 或 jpg 文件,但它不起作用。(我是 SDL 的新手)我编写了一个程序,它执行以下操作:

  • 绘图背景(正在工作)
  • 创建随机像素/显示它们(经常工作(随机值仍然有问题))
  • 显示 png /jpg 文件(它们都不起作用)

我正在使用 Visual Studio 2012 Express / Visual Studio 2013 Professional。由于我正在 Windows 操作系统上开发,我可以看到图像(通过将应用程序悬停在任务栏中)正在加载到缓冲区(或其他任何内容)中,但它没有显示在实际应用程序中。其余的都可以渲染,除了图像。所有函数都返回正确的值。清理和重建也不起作用。

该项目链接了以下库:

  • SDL2.lib
  • SDL2main.lib
  • SDL2_image.lib

包含文件夹是 x86 文件夹。x86 文件夹中的 DLL 文件放在我的项目文件夹中。

代码并不多,所以我插入了一个项目文件的链接,以便可以下载它,我将非常感谢任何帮助。我有点绝望,因为我现在正试图处理这个错误几天。

我还尝试在 2 台不同的计算机上进行编码。他们两个都有同样的问题。

下载项目:这里

(由于随机像素问题,您可能需要重新启动应用程序)

有谁可以告诉我我做错了什么?

4

1 回答 1

1

这就是我为调试它所做的。

1) 在 CBuild::Init 中,它卡在 CreateWindow:不知道发生了什么,但 CPU 处于 99%!更改 SDL_WINDOW_BORDERLESS | SDL_WINDOW_FULLSCREEN 到 SDL_WINDOW_SHOWN 所以我们可以继续。

2) 解决随机像素问题。只需注释掉并重新启动。

3) 一切正常,直到 SDL_ConvertSurface 的 createIMG: 因为格式为 0 而崩溃。往回走,看看它在哪里被破坏了。它在 SDL_CreateRenderer 中。这不应该在 SDL_GetWindowSurface 之前吗?试试看,是的,它有效。所以 cbuild_init 中的修复是。

pWindow = SDL_CreateWindow(
  "kartoffel", 
  SDL_WINDOWPOS_CENTERED,
  SDL_WINDOWPOS_CENTERED,
  displaymode.w,
  displaymode.h,
  SDL_WINDOW_SHOWN);

// create renderer
pRenderer = SDL_CreateRenderer(pWindow, -1, SDL_RENDERER_ACCELERATED);

pSurfWnd = SDL_GetWindowSurface(pWindow);

SDL_FillRect ...
// ignore random pixels
pIMG_logo->createIMG ...

不幸的是,我也是 SDL 的新手,所以我无法真正告诉你为什么它是错误的并且这个序列有效。也许其他阅读本文的人可以告诉你。

于 2013-12-29T23:29:58.460 回答