我需要提取像素信息并填充要在我的Qt程序中使用的QPixmap。
我目前正在分两个步骤进行此操作。
SDL_SaveBMP()
我将中间.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);
答案 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);