SDL显示内存中的图像
<textarea readonly="readonly" name="code" class="c++">#include <stdio.h>#include "SDL/SDL.h"#include "SDL/SDL_image.h"void ShowPic(unsigned char *buf, int size, SDL_Surface *screen, int x, int y){ SDL_RWops *src; SDL_Surface *image; SDL_Rect dest; src = SDL_RWFromMem(buf, size); /* 将BMP文件加载到一个surface*/ image = IMG_Load_RW(src, 1); if ( image == NULL ) { fprintf(stderr, "无法加载 %s\n", SDL_GetError()); return; } /* Blit到屏幕surface。onto the screen surface. 这时不能锁住surface。 */ dest.x = x; dest.y = y; dest.w = image->w; dest.h = image->h; SDL_BlitSurface(image, NULL, screen, &dest); /* 刷新屏幕的变化部分 */ SDL_UpdateRects(screen, 1, &dest);}int main(int argc, char *argv[]){ unsigned char *buf; FILE *fp; int size, i; if (argc != 2) { fprintf(stderr, "Usage:%s file_name\n", argv[0]); exit(1); } if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0){ fprintf(stderr, "无法初始化SDL: %s\n", SDL_GetError()); exit(1); } atexit(SDL_Quit);SDL_Surface *screen; screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE); if (screen == NULL){ fprintf(stderr, "无法设置640x480的视频模式:%s\n", SDL_GetError()); exit(1); } fp = fopen(argv[1], "r"); if (fp == NULL) { perror("fopen"); exit(1); } fseek(fp, 0L, SEEK_END); size = ftell(fp); printf("file size:%d\n", size); rewind(fp); buf = malloc(size); if (buf == NULL) { perror("malloc"); exit(1); } memset(buf, 0, size); i = fread(buf, size, 1, fp); if (i < 0) { perror("fread"); exit(1); } fclose(fp); printf("read:%d\n", i);#if 0 for (i = 0; i < 100; i++) { if (i % 10 == 0) printf("\n"); printf("%02X ", buf[i]); } printf("\n");#endifShowPic(buf, size, screen, 0, 0);printf("please enter Enter to exit....");getchar();return 0;}