Blue Flower

#include 
#include 
#include <SDL/SDL.h>

int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL, *lignes[256] = {NULL};
SDL_Rect position;
int i = 0;

SDL_Init(SDL_INIT_VIDEO);

ecran = SDL_SetVideoMode(640, 256, 32, SDL_HWSURFACE); // Hauteur

for (i = 0 ; i <= 255 ; i++)
lignes[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 1, 32, 0, 0, 0, 0);

SDL_WM_SetCaption("Dégradé en SDL !", NULL);

SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));

for (i = 0 ; i <= 255 ; i++)
{
position.x = 0;
position.y = i;
SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, i, i, i)); 
SDL_BlitSurface(lignes[i], NULL, ecran, &position);
}

SDL_Flip(ecran);
getchar();

for (i = 0 ; i <= 255 ; i++) 
SDL_FreeSurface(lignes[i]);
SDL_Quit();

return EXIT_SUCCESS;
}

Création d'un tableau de 256 lignes.

SDL_Surface *ecran = NULL, *lignes[256] = {NULL};

Création lignes par lignes avec une boucle.

lignes[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 1, 32, 0, 0, 0, 0);

Remplissage et collage lignes par lignes avec la boucle.

SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, i, i, i)); 
SDL_BlitSurface(lignes[i], NULL, ecran, &position);

Affichage de la ligne.

SDL_Flip(ecran);

Libération de la mémoire.

SDL_FreeSurface(lignes[i]);
Nota.
Pour information : Manipuler les surfaces SDL en langage C.