Corrail
2005-02-04, 16:31:26
Hallo!
Für ein Projekt für die Arbeit muss ich mit SDL Bild darstellen. Das funktioniert soweit auch ganz gut nur sobald ich mein SDL Fenster verschiebe, es den Fokus verliert oder ich sonst irgendwas mache wird das Fenster weiß und zeigt keine aktuellen Bilder mehr an.
Der SDL Init Code:
SDL_Surface *display;
SDL_Init(SDL_INIT_EVERYTHING);
display = SDL_SetVideoMode( 640, 480, 16, SDL_SWSURFACE);
Hier der Sourcecode innerhalb der Schleife:
// Das Bild was ich bekomme is in einem 8Bit Grayscale Format welches ich zuerst mal umwandle
unsigned char * tmp = (unsigned char*)mi->getFirstPointer();
unsigned char * img_data = new unsigned char[mi->getWidth()*mi->getHeight()*4];
for (unsigned int i = 0; i < mi->getWidth()*mi->getHeight(); i++)
{
img_data[4*i+0] = img_data[4*i+1] = img_data[4*i+2] = tmp[i];
img_data[4*i+3] = 0;
}
SDL_Surface * image = SDL_CreateRGBSurfaceFrom(img_data,
mi->getWidth(),
mi->getHeight(),
32, mi->getWidth()*4,
rmask, gmask, bmask, 0);
// Bild ist fertig
SDL_Rect dest;
dest.x = 0;
dest.y = 0;
dest.w = image->w;
dest.h = image->h;
// Bild wird aufs SDL Window geblittet
SDL_BlitSurface(image, NULL, display, NULL);
// SDL Window wird upgedatet
SDL_UpdateRect(display, 0, 0, 0, 0);
// Bild wird wieder gelöscht
SDL_FreeSurface(image);
Für ein Projekt für die Arbeit muss ich mit SDL Bild darstellen. Das funktioniert soweit auch ganz gut nur sobald ich mein SDL Fenster verschiebe, es den Fokus verliert oder ich sonst irgendwas mache wird das Fenster weiß und zeigt keine aktuellen Bilder mehr an.
Der SDL Init Code:
SDL_Surface *display;
SDL_Init(SDL_INIT_EVERYTHING);
display = SDL_SetVideoMode( 640, 480, 16, SDL_SWSURFACE);
Hier der Sourcecode innerhalb der Schleife:
// Das Bild was ich bekomme is in einem 8Bit Grayscale Format welches ich zuerst mal umwandle
unsigned char * tmp = (unsigned char*)mi->getFirstPointer();
unsigned char * img_data = new unsigned char[mi->getWidth()*mi->getHeight()*4];
for (unsigned int i = 0; i < mi->getWidth()*mi->getHeight(); i++)
{
img_data[4*i+0] = img_data[4*i+1] = img_data[4*i+2] = tmp[i];
img_data[4*i+3] = 0;
}
SDL_Surface * image = SDL_CreateRGBSurfaceFrom(img_data,
mi->getWidth(),
mi->getHeight(),
32, mi->getWidth()*4,
rmask, gmask, bmask, 0);
// Bild ist fertig
SDL_Rect dest;
dest.x = 0;
dest.y = 0;
dest.w = image->w;
dest.h = image->h;
// Bild wird aufs SDL Window geblittet
SDL_BlitSurface(image, NULL, display, NULL);
// SDL Window wird upgedatet
SDL_UpdateRect(display, 0, 0, 0, 0);
// Bild wird wieder gelöscht
SDL_FreeSurface(image);