3

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

我目前正在分两步执行此操作。

  • SDL_Surface 到 Windows .bmp 使用SDL_SaveBMP()
  • .bmp 到 QImage
  • QImage 到 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);
4

1 回答 1

2

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

SDL_Surface* surf = /* get surface */

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

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

然后你可以简单地QPixmapQImage

QPixmap = QPixmap::fromImage(img);

QPixmap::fromImage() 参考

于 2012-06-29T12:36:30.850 回答