zoukankan      html  css  js  c++  java
  • 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
    ", 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
    ", argv[0]);
            exit(1);
    
        }
    
        if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0)
    	{
            fprintf(stderr, "无法初始化SDL: %s
    ", 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
    ", 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
    ", 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
    ", i);
    
    #if 0
        for (i = 0; i < 100; i++)
        {
            if (i % 10 == 0)
                printf("
    ");
            printf("%02X ", buf[i]);
        }
        printf("
    ");
    #endif
    	ShowPic(buf, size, screen, 0, 0);
    
    	printf("please enter Enter to exit....");
    	getchar();
    
    	return 0;
    }
    



  • 相关阅读:
    C#生成唯一码方法
    解剖常用软件程序都用什么语言开发
    Unity3D笔记七 GUILayout
    函数的递归
    函数
    函数的参数
    函数的返回值
    函数的定义
    文件处理
    集合
  • 原文地址:https://www.cnblogs.com/james1207/p/3329098.html
Copyright © 2011-2022 走看看