2012-06-29 5 views
1

픽셀 정보를 추출하고 QP 프로그램에서 사용할 QPixmap을 채워야합니다.SDL_Surface에서 QPixmap으로 효율적으로 변환

현재 2 단계 프로세스에서이 작업을 수행하고 있습니다. QImage

  • 에 윈도우 .BMP 사용 SDL_SaveBMP()
  • .BMP에

    • SDL_Surface는 QImage 내가 메모리에 중간 .BMP를 저장하고

    QPixmap합니다. 그러나 전반적으로 .bmp와 관련된 파일 형식 변환 오버 헤드가 관련되어 있기 때문에이 방법이 만족스럽지 않습니다.

    더 좋은 제안이 있습니까?

    편집 : 제록의 대답에서, 최종 작업 코드를 공유 플러스 QImage constructors

    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); 
    
  • 답변

    2

    하나는 원시 이미지 데이터를 취 픽셀 형식을 실험. 당신은 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에 따라 달라집니다.

    그럼 당신은 단순히 QImage에서 QPixmap을 만들 수 있습니다

    QPixmap = QPixmap::fromImage(img); 
    

    QPixmap::fromImage() reference

    +1

    감사합니다. 이 방법을 사용하여 작업했지만 약간의 변화가있었습니다. SDI_Surface에 QImage 형식 중 하나를 사용하여 QImage로 변환 할 수없는 픽셀 형식이있는 경우 SDL_Surface를 SDI_CreateRGBSurface()에 의해 생성 된 새 SDL_Surface로 블릿해야합니다. –