[C con Clase] SDL2 Salvar pantalla como bmp

Borja Ilundain borjailundain en gmail.com
Lun Nov 18 10:06:10 CET 2013


Hola!

Bueno, he descubierto una forma de hacerlo, pero no es ni de lejos tan
sencilla como la manera de SDL 1.2, te dejo unas líneas de código y explico:

    Uint32* pixels=new Uint32[DEF_HEIGHT*DEF_WIDTH];
    SDL_RenderReadPixels(renderer,NULL,0,pixels,DEF_WIDTH*4); //Defino el
pitch como la anchura x 4 porque estoy usando una profundidad de 32 bits...
    SDL_Surface* screen=
SDL_CreateRGBSurfaceFrom(pixels,DEF_WIDTH,DEF_HEIGHT,32,DEF_WIDTH*4,0,0,0,0);
    SDL_SaveBMP(screen,"pantallazo.bmp");
    SDL_FreeSurface(screen);
    delete[] mypixels;

Lo primero de todo, la altura y anchura de la ventana están almacenadas en
las constantes (o macros, si lo prefieres) DEF_HEIGHT y DEF_WIDTH y
trabajamos con una profundidad de color de 32 bits, y nuestro SDL_renderer
es la variable renderer.
En la primera línea de código se crea un puntero y le asignamos dinámica
memoria para almacenar la información de los píxels del contexto de
renderizado.
Se usa la función SDL_RenderReadPixels para volcar toda la información de
los píxels actuales del renderer en el puntero pixels.
Se crea una nueva SDL_Surface con SDL_CreateRGBSurfaceFrom, pasándole la
información almacenada en pixels.
Después guardamos la imagen bmp con SDL_SaveBMP y liberamos la memoria que
ya no necesitamos.

Complicadillo pero funciona ;)

Un saludo!


El 17 de noviembre de 2013 11:55, Hl3 <halowin3 en gmail.com> escribió:

> Hola.
> Tengo un programa que hace unas cosas mas o menos bonitas con un par de
> imagenes cargadas.
> Con la version 1.2 de SDL guardaba el resultado con SDL_SaveBMP que lleva
> como argumento un surface,pero con la version 2 no se como hacerlo, pues lo
> que tengo en pantalla está en el render y no en un surface.
>
> He probado con SDL_GetWindowSurface( win ), pero el resultado no es lo que
> yo pensaba.
>
> Si alguien me puede dar una pista ......!!!
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131118/06e722f3/attachment.html>


Más información sobre la lista de distribución Cconclase