首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

SDL展示内存中的图像

2013-09-24 
SDL显示内存中的图像textarea readonlyreadonly namecode classc#include stdio.h#include

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;}


热点排行