从SDL_Surface到QPixmap的高效转换

时间:2012-06-29 11:51:37

标签: c++ qt sdl

我需要提取像素信息并填充要在我的Qt程序中使用的QPixmap。

我目前正在分两个步骤进行此操作。

  • 使用SDL_SaveBMP()
  • 的Windows .bmp的SDL_Surface
  • .bmp to QImage
  • QImage to QPixmap

我将中间.bmp存储在内存中。但总的来说,我对这种方法不满意,因为它涉及与.bmp

相关的文件格式转换开销

有什么更好的建议吗?

编辑:分享最终的工作代码,来自jrok的回答以及使用像素格式进行实验

SDL_Surface *screen = ... /* Whatever surface you want to copy from */
SDL_Surface *surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
                       screen->w, screen->h,
                       24, rmask, gmask, bmask, amask);
SDL_BlitSurface(screen,NULL, surface,NULL);
QImage img(static_cast<uchar*>(surface->pixels),
                       surface->w, surface->h, QImage::Format_RGB888);

1 个答案:

答案 0 :(得分:2)

QImage constructors中的一个获取原始图像数据。您可以从SDL_Surface结构传递它pixels指针:

SDL_Surface* surf = /* get surface */

QImage img(static_cast<uchar*>(surf->pixels), surf->w, surf->h, QImage::Format_RGB32);

最后一个参数取决于SDL_Surface的SDL_PixelFormat

然后,您只需从QPixmap

中制作QImage即可
QPixmap = QPixmap::fromImage(img);

QPixmap::fromImage() reference