3

ピクセル情報を抽出し、Qt プログラムで使用する QPixmap を設定する必要があります。

私は現在、2段階のプロセスでこれを行っています。

  • SDL_Surface to 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コンストラクターの 1 つは生の画像データを取ります。pixelsSDL_Surface 構造体からポインタを渡すことができます:

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() リファレンス

于 2012-06-29T12:36:30.850 に答える