提供了SDL非常多的基础功能、包括画线画圆各种函数包和缩放图形!

可以在这里下载:http://www.ferzkopp.net/joomla/content/view/19/14/

名为SDL_gfx、这里是它的API文档http://www.ferzkopp.net/Software/SDL_gfx-2.0/Docs/html/index.html

 

当然吗如果迩仅仅是需要缩放的话而不需要其它功能也可以自己写个简单的缩放图形的函数、这里是

 

这里提供完整的缩放代码:

Uint32 ReadPixel(SDL_Surface *surface, int x, int y)
{
    int bpp = surface->format->BytesPerPixel;
    /* Here p is the address to the pixel we want to retrieve */
    Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

    switch(bpp) {
    case 1:
        return *p;
        break;

    case 2:
        return *(Uint16 *)p;
        break;

    case 3:
        if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
            return p[0] << 16 | p[1] << 8 | p[2];
        else
            return p[0] | p[1] << 8 | p[2] << 16;
        break;

    case 4:
        return *(Uint32 *)p;
        break;

    default:
        return 0;       /* shouldn't happen, but avoids warnings */
    }
}

void DrawPixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
{
    int bpp = surface->format->BytesPerPixel;
    /* Here p is the address to the pixel we want to set */
    Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

    switch(bpp) {
    case 1:
        *p = pixel;
        break;

    case 2:
        *(Uint16 *)p = pixel;
        break;

    case 3:
        if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
            p[0] = (pixel >> 16) & 0xff;
            p[1] = (pixel >> 8) & 0xff;
            p[2] = pixel & 0xff;
        } else {
            p[0] = pixel & 0xff;
            p[1] = (pixel >> 8) & 0xff;
            p[2] = (pixel >> 16) & 0xff;
        }
        break;

    case 4:
        *(Uint32 *)p = pixel;
        break;
    }
}

SDL_Surface* SDL_ScaleSurface(SDL_Surface *Surface, Uint16 Width, Uint16 Height)
{
      SDL_Surface *_ret = SDL_CreateRGBSurface(Surface->flags, Width, Height, Surface->format->BitsPerPixel,
        Surface->format->Rmask, Surface->format->Gmask, Surface->format->Bmask, Surface->format->Amask);

     double    _stretch_factor_x = (static_cast<double>(Width)  / static_cast<double>(Surface->w)),
        _stretch_factor_y = (static_cast<double>(Height) / static_cast<double>(Surface->h));

    for(Sint32 y = 0; y < Surface->h; y++) //Run across all Y pixels.
        for(Sint32 x = 0; x < Surface->w; x++) //Run across all X pixels.
            for(Sint32 o_y = 0; o_y < _stretch_factor_y; ++o_y) //Draw _stretch_factor_y pixels for each Y pixel.
                for(Sint32 o_x = 0; o_x < _stretch_factor_x; ++o_x) //Draw _stretch_factor_x pixels for each X pixel.
                    DrawPixel(_ret, static_cast<Sint32>(_stretch_factor_x * x) + o_x, 
                        static_cast<Sint32>(_stretch_factor_y * y) + o_y, ReadPixel(Surface, x, y));

    return _ret;
}

最后迩只需要简单的调用SDL_ScaleSurface就可以了、这个代码的实现非常的简单、先输入长宽、然后计算输出的表面长宽比、如果是小于的话、就两个像素变成一个像素、如果是大于原来的表面的话、就复制两个像素代表原来的一个像素、总的来说就是这样子吧其中返回的是计算后的生成的表面、如果原来的表面没有用的话、赶紧使用SDL_FreeSurface释放掉它吧、不然又要占内存空间了、这里还依赖了两个函数写像素和读像素

 

原文链接:

 http://www.sdltutorials.com/sdl-scale-surface

http://www.libsdl.org/cgi/docwiki.cgi/Pixel_Access

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SDL在不同平台上的移植方法略有不同,以下是SDL在Windows、Linux和Arm-Linux上的移植方法: 在Windows平台上,可以通过以下步骤来移植SDL: 1. 下载SDL的Windows版本开发库,并将其解压到本地目录中。 2. 在Visual Studio中新建一个工程,并在工程中添加SDL的头文件路径和库文件路径。 3. 在工程中添加SDL的库文件,并将SDL.dll文件放入工程的运行目录中。 4. 使用SDL提供的API进行开发。 在Linux平台上,可以通过以下步骤来移植SDL: 1. 安装SDL的开发库,可以使用命令sudo apt-get install libsdl2-dev进行安装。 2. 在编译时加入SDL的库文件,并使用SDL提供的API进行开发。 在Arm-Linux平台上,可以通过以下步骤来移植SDL: 1. 在交叉编译环境中安装SDL的开发库。 2. 在编译时指定交叉编译器,并加入SDL的库文件。 3. 将生成的可执行文件拷贝到目标设备上,并将SDL的库文件拷贝到目标设备的库路径中。 4. 在目标设备上运行可执行文件。 以上是SDL在不同平台上的移植方法,具体实现可能需要根据具体情况进行调整。 ### 回答2: SDL(Simple DirectMedia Layer)是一个跨平台的多媒体库,可用于游戏开发和媒体应用程序。它提供了一套简单的API,用于处理音频、视频、图形和输入设备。 在Windows上进行SDL移植,可以按照以下步骤进行: 1. 下载SDL开发库的Windows版本,并解压到合适的目录中。 2. 在开发环境中设置SDL相关的编译选项和库路径,使得编译器可以找到SDL头文件和库文件。 3. 在项目中SDL的头文件,使用SDL的API编写代码。 4. 将SDL的库文件链接到项目中,以便在运行时可以正确地加载和使用SDL功能。 在Linux上进行SDL移植,可以按照以下步骤进行: 1. 使用系统的管理器安装SDL开发库,例如在Ubuntu上可以使用apt-get命令安装。 2. 在开发环境中设置SDL相关的编译选项和库路径,使得编译器可以找到SDL头文件和库文件。 3. 在项目中SDL的头文件,使用SDL的API编写代码。 4. 将SDL的库文件链接到项目中,以便在运行时可以正确地加载和使用SDL功能。 在Arm-Linux上进行SDL移植,可以按照以下步骤进行: 1. 获取适用于Arm-Linux的SDL源码,并进行交叉编译,生成适用于Arm架构的SDL库文件。 2. 在开发环境中设置交叉编译工具链、SDL相关的编译选项和库路径,使得编译器可以找到SDL头文件和库文件。 3. 在项目中SDL的头文件,使用SDL的API编写代码。 4. 将交叉编译生成的Arm-Linux上的SDL库文件链接到项目中,以便在运行时可以正确地加载和使用SDL功能。 总结而言,SDL的移植方法主要包括下载安装开发库、在开发环境中配置编译选项和库路径、含头文件、链接库文件等步骤。具体的过程根据不同的操作系统和平台有所区别,但整体上都是相似的。 ### 回答3: SDL(Simple DirectMedia Layer)是一个跨平台的多媒体库,它提供了对图形、音频、输入设备等的统一访问接口。以下是在Windows、Linux和Arm-Linux上进行SDL多平台移植的方法: 在Windows上移植SDL: 1. 下载SDL的Windows开发,并解压到合适的位置。 2. 在工程中添加SDL的头文件路径和库文件路径。 3. 将SDL.dll拷贝到工程的可执行文件所在的目录下。 在Linux上移植SDL: 1. 在终端中使用管理器安装SDL库和开发。 2. 在编译时使用SDL的头文件路径和库文件路径,例如: gcc main.c -o main -lSDL2 在Arm-Linux上移植SDL: 1. 安装交叉编译器,并设置环境变量,以便能够编译针对Arm架构的程序。 2. 下载适用于Arm-Linux的SDL开发,并解压到合适的位置。 3. 在交叉编译时使用交叉编译器的头文件路径和库文件路径,例如: arm-linux-gcc main.c -o main -I/path/to/SDL/include -L/path/to/SDL/lib -lSDL2 以上是SDL在Windows、Linux和Arm-Linux上的简要移植方法。具体的移植过程可能会因操作系统版本、编译器等而有所不同,需要根据具体情况进行相应的调整和配置。移植时还需注意版本兼容性、库依赖关系等问题,确保移植后的程序能够正确运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值