`
844604778
  • 浏览: 551364 次
文章分类
社区版块
存档分类
最新评论

SDL显示内存中的图像

 
阅读更多
<textareareadonly="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");
#endif
	ShowPic(buf, size, screen, 0, 0);

	printf("please enter Enter to exit....");
	getchar();

	return 0;
}


分享到:
评论

相关推荐

    SDL2.0 图像显示demo

    基于SDL2.0的YUV图像显示示例程序!涵盖多种YUV格式!

    SDL显示yuv图像.rar

     与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色...

    ffmpeg SDL 显示视频

    新手入门,ffmpeg SDL显示视频,编译通过

    linux中 SDL 显示图片

    SDL其使用用途很多,本文挡主要用于说明如何在linux中使用SDL显示图片,并详细介绍所涉及到的函数详细用法。

    SDL 显示中文 例程

    这是我自己用的SDL中文显示的例子,中文显示困扰了我好久,希望加快后来人的研发速度,所以把方法放在这里,供嵌入式游戏设计的朋友们使用。

    利用ffmpeg和SDL显示视频

    利用ffmpeg和SDL显示视频

    SDL显示图片及文字

    本段示例代码在vs2005中实现,用于演示SDL图片及文字的显示。

    SDL DEMO(源码), 实现了SDL显示汉字,图片等

    SDL DEMO(源码), 实现了SDL显示汉字,图片等

    SDL图像旋转库函数

    SDL_gfx 函数是支持旋转和缩放的SDL扩展库,本文件是SDL_GF函数的源代码

    linux下V4L2+SDL摄像头采集显示程序

    使用video4linux2编程接口,获得笔记本摄像头影像后,用SDL显示在X Window下。 关键点有二:其一,从video4linux2的编程接口笔者了解到其笔记本摄像头支持YUYV视频帧格式,显示在 SDL上需要将YUYV格式转换成SDL支持...

    SDL显示时间和天气.rar

    SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。现SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

    MFC使用SDL显示图片

    mfc使用SDL显示图片,一个简单的例子。这里假设你已经配置好了SDL环境。使用的是VS2008.测试的时候将图片文件拷贝到生成目录

    SDL中文帮助文档

    SDL官方中文帮助文档,帮助SDL的快速入门,html文档方便快捷浏览

    在QT5中使用SDL2显示bmp图片

    在QT5中使用SDL2显示bmp图片,一个很简单的测试程序,SDL在QT中环境搭建可以参考这篇文章:http://blog.csdn.net/hjl240/article/details/48102897

    SDL入门教程中文(最好的SDL入门教程,自己手工整理)

    因为Linux的普及以及不受$M的牵制,SDL在过去的几年中,成为了跨平台开发PC游戏的首选。即使是在Windows平台下,SDL有具有自身的优势。与MFC使用不成熟的C++外表伪封装的win32api以及一家独唱推崇的COM风格和.net相...

    SDL 显示YUV,RGB, BMP

    通过SDL1显示BMP,YUV的示例程序。 功能: 支持直接显示文件BMP 支持显示内存BMP 支持显示YUV 附: BMP缩放需要SDL_GFX扩展。 工程是VS2010的WIN32

    SDL 显示图片和 openGL 3D 地球

    GTK开发界面使用SDL显示图片,OpenGL绘制3D地球。地球使用GLut库实现。

    在QT5使用SDL2显示bmp图片

    在QT5使用SDL2显示bmp图片,详细说明可以参考整个文章:http://blog.csdn.net/hjl240/article/details/48102897

    视频显示库SDL

    sdl开发库,视频渲染显示;方便易用,很小巧的一个开源库;

Global site tag (gtag.js) - Google Analytics