test/testbitmap.c
changeset 691 609543e2b3a1
parent 0 74212992fb08
child 1151 be9c9c8f6d53
--- a/test/testbitmap.c	Sat Aug 23 23:12:19 2003 +0000
+++ b/test/testbitmap.c	Sat Aug 23 23:18:49 2003 +0000
@@ -50,8 +50,13 @@
 	Uint8  video_bpp;
 	Uint32 videoflags;
 	Uint8 *buffer;
-	int i, done;
+	int i, k, done;
 	SDL_Event event;
+	Uint16 *buffer16;
+        Uint16 color;
+        Uint8  gradient;
+	SDL_Color palette[256];
+
 
 	/* Initialize SDL */
 	if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
@@ -91,6 +96,16 @@
 		exit(2);
 	}
 
+	if (video_bpp==8) {
+		/* Set a gray colormap, reverse order from white to black */
+		for ( i=0; i<256; ++i ) {
+			palette[i].r = 255-i;
+			palette[i].g = 255-i;
+			palette[i].b = 255-i;
+		}
+		SDL_SetColors(screen, palette, 0, 256);
+	}
+
 	/* Set the surface pixels and refresh! */
 	if ( SDL_LockSurface(screen) < 0 ) {
 		fprintf(stderr, "Couldn't lock the display surface: %s\n",
@@ -98,10 +113,25 @@
 		exit(2);
 	}
 	buffer=(Uint8 *)screen->pixels;
-	for ( i=0; i<screen->h; ++i ) {
-		memset(buffer,(i*255)/screen->h, screen->pitch);
-		buffer += screen->pitch;
-	}
+	if (screen->format->BytesPerPixel!=2) {
+        	for ( i=0; i<screen->h; ++i ) {
+        		memset(buffer,(i*255)/screen->h, screen->pitch);
+        		buffer += screen->pitch;
+        	}
+        }
+        else
+        {
+		for ( i=0; i<screen->h; ++i ) {
+			gradient=((i*255)/screen->h);
+                        color = SDL_MapRGB(screen->format, gradient, gradient, gradient);
+                        buffer16=(Uint16*)buffer;
+                        for (k=0; k<screen->w; k++)
+                        {
+                            *(buffer16+k)=color;
+                        }
+			buffer += screen->pitch;
+		}
+        }
 	SDL_UnlockSurface(screen);
 	SDL_UpdateRect(screen, 0, 0, 0, 0);