1
我正在嘗試將Qt庫與SDL應用程序集成。我想將QPixmap轉換爲SDL_Surface,然後顯示該表面。我怎樣才能做到這一點?我一直無法找到任何好的例子。將QPixmap轉換爲SDL_Surface並將其顯示在屏幕上
我已經成功將下面的代碼至今:
Uint32 rmask = 0x000000ff;
Uint32 gmask = 0x0000ff00;
Uint32 bmask = 0x00ff0000;
Uint32 amask = 0xff000000;
SDL_FillRect(screen, NULL, SDL_MapRGBA(screen->format, 255, 255, 255, 255));
const QImage *qsurf = ...;
SDL_Surface *surf = SDL_CreateRGBSurfaceFrom((void*)qsurf->constBits(), qsurf->width(), qsurf->height(), 32, qsurf->width() * 4, rmask, gmask, bmask, amask);
SDL_BlitSurface(surf, NULL, screen, NULL);
SDL_FreeSurface(surf);
SDL_Flip(screen);
這工作,但唯一的問題是我的每一個基於QImage的表面塗一次,底層面積不清零和透明部分在幾幀的過程中「淡化」成固體。
我確實有SDL_FillRect
,我想要清除屏幕,但它似乎並沒有這樣做。 screen
是主要的SDL表面。
你爲什麼做這樣的一個東西? Qt有非常棒的工具可以在屏幕上顯示圖像。 – Blood
我正在開發一個用Qt開發渲染庫的項目,我們想提供如何將我們的庫渲染功能與其他圖形工具包集成的示例。 –
事實上,我幾個月前幫助過一個人,他們遇到了同樣的問題,並且我還記得將QPixmap轉換爲SDL_Surface的解決方案是最好的。你可以嘗試使用qsurf-> bits()而不是constBits() – Blood