图片显示的优化以及blit
- //头文件
- #include "SDL/SDL.h"
- #include <string>
- //窗口属性
- const int SCREEN_WIDTH = 640;
- const int SCREEN_HEIGHT = 480;
- const int SCREEN_BPP = 32;
- //将要使用的表面
- SDL_Surface *message = NULL;
- SDL_Surface *background = NULL;
- SDL_Surface *screen = NULL;
- SDL_Surface *load_image( std::string filename )
- {
- //临时的空间,用于存储刚刚加载好的图像
- SDL_Surface* loadedImage = NULL;
- //优化后的图像,实际使用的是这个图像
- SDL_Surface* optimizedImage = NULL;
- //加载图像
- loadedImage = SDL_LoadBMP( filename.c_str() );
- //如果加载图片没有出错
- if( loadedImage != NULL )
- {
- //创建一个优化了的图像
- optimizedImage = SDL_DisplayFormat( loadedImage );
- //释放临时的图像
- SDL_FreeSurface( loadedImage );
- }
![](/assets/blank.gif)
![](/assets/blank.gif)
- //返回优化后的表面
- return optimizedImage;
- }
- void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )
- {
- //新建一个临时的矩形来保存偏移量
- SDL_Rect offset;
- //将传入的偏移量保存到矩形中
- offset.x = x;
- offset.y = y;
- //执行表面的Blit
- SDL_BlitSurface( source, NULL, destination, &offset );
- }
- int main( int argc, char* args[] )
- {
- //初始化SDL的所有子系统
- if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
- {
- return 1;
- }
- //设置窗口
- screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
- //如果设置窗口时出现错误
- if( screen == NULL )
- {
- return 1;
- }
- //设置窗口标题
- SDL_WM_SetCaption( "Hello World", NULL );
![](/assets/blank.gif)
- //加载图片
- message = load_image( "hello.bmp" );
- background = load_image( "background.bmp" );
- //将背景图片background应用到screen上
- apply_surface( 0, 0, background, screen );
![](/assets/blank.gif)
![](/assets/blank.gif)
- apply_surface( 320, 0, background, screen );
- apply_surface( 0, 240, background, screen );
- apply_surface( 320, 240, background, screen );
- //将message表面应用到窗口中
- apply_surface( 180, 140, message, screen );
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
- //更新窗口
- if( SDL_Flip( screen ) == -1 )
- {
- return 1;
- }
- //等待2秒
- SDL_Delay( 2000 );
- //释放表面
- SDL_FreeSurface( message );
- SDL_FreeSurface( background );
- //退出SDL
- SDL_Quit();
- //main函数返回
- return 0;
- }
疑难解答
可能出现的问题
|
解决方法
|
使用Visual Studio编译时,编译器报错: “SDL/SDL.h”:没有这个文件或目录。
|
看一下代码顶部,确保写的是 #include "SDL.h" 。
|
生成成功,但运行时没有显示图形窗口或者窗口闪烁一下就消失,并且在程序目录下找到一个包含下列内容的stderr.txt文件:
Fatal signal: Segmentation Fault (SDL Parachute Deployed)
|
这是由于程序在试图访问不属于它自己的内存空间。其中一种可能是程序在执行 apply_surface() 时试图访问 NULL 所指向的内存位置,这意味着图片加载出错,请确保图片文件和程序文件在同一个目录下。Visual Studio用户则需要将图片文件与vcproj文件放在同一目录下。
|
生成成功,程序可以运行,但没有显示图片
|
与上一个问题一样,请确保图片文件和程序文件在同一个目录下。Visual Studio用户则需要将图片文件与vcproj文件放在同一目录下。
|
使用Visual Studio成功生成程序,但程序在运行时报错: The application failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem
|
这是因为你没有为你的编译器或IDE安装最新的补丁或升级包,这会导致SDL无法与Visual Studio配合使用。
|
图片显示的优化以及blit相关推荐
- iOS 图片渲染及优化
下图是一张超美的太空图,如果我的项目中要使用这么一张图片,我该怎么显示和优化了(如何显示和优化大图显示). 图片资源原始网站:在这里 假如这张图大小为:52kb 图片显示流程 1.加载 (数据缓冲区) ...
- 服务器上有图片但是app不显示不出来,网络app图片显示不出来的
网络app图片显示不出来的 内容精选 换一换 接入CDN加速后,用户访问网站或者APP资源依然很慢.域名是否接入CDN加速是否命中CDN缓存是否跨运营商和跨省缓存规则设置是否合理加速资源是否预热是否客 ...
- iOS开发学无止境 - 异步图片加载优化与常用开源库分析
作者:罗轩(@luoyibu) 网址:http://www.jianshu.com/p/3b2c95e1404f 1. 网络图片显示大体步骤: 下载图片 图片处理(裁剪,边框等) 写入磁盘 从磁盘 ...
- iOS显示性能优化过程讲解
点我跳转原文地址 卡顿的原理 iOS系统界面滑动流畅性的保持主要是依靠CPU和GPU两大处理硬件间通力合作的结果,一个视图的显示需要先经过CPU创建.布局计算.对图片解码.文本绘制,然后CPU将计算的 ...
- 图片优化_网站里的图片应该如何优化
我们一直都在做网站关键词.内页关键词.标签等.但很多朋友都忽略了网站里的图片如何优化.近年来百度图片识别.360图片识别都在不断升级功能上已经很完善了,所以我们应该对网站图片进行优化,应该做seo的朋 ...
- Android系统性能优化(59)----代码、图片和布局优化
Android优化系列--代码.图片和布局优化 这篇文章分为三个部分代码优化.图片优化.布局优化,尽量每个方法都写了小的Demo! 代码优化:不要做多余的工作,尽量避免次数过多的内存的分配,(需要对a ...
- 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
[Android SDM660源码分析]- 03 - UEFI XBL GraphicsOutput BMP图片显示流程 1. GraphicsOutput.h 2. 显示驱动初化 DisplayDx ...
- 5.pygame图片显示
前言: 因为我们这一节课要学习和图片有关的,我就先给出示例图片了 bird.png 我们这一节课要学习图片显示及操作,在正式学习之前我们还要搭建程序框架 #导入模块 import pygame imp ...
- 网页图片加载优化方法总结
目录 1.压缩 2.直接一开始用压缩过的体积小的图,等加载完毕后,再用高清无码图来替换掉 3.使用base64编码代替图片 4.更好的图片格式 5.合并图片sprite(雪碧图) 6.使用css.sv ...
最新文章
- 爬虫书籍-Python网络爬虫权威指南OCR库 NLTK 数据清洗 BeautifulSoup Lambda表达式 Scrapy 马尔可夫模型
- 把 Bug 晾几天就能解决了!!! | 每日趣闻
- 二维树状数组 BZOJ 1452 [JSOI2009]Count
- 机器翻译中丢掉词向量层会怎样?
- DATAGUARD STANDBY 服务器归档日志管理
- 【Redis】11.Redis事务、事务锁
- Codeforces Round #712 (Div. 2) D. 3-Coloring 交互 构造
- activiti 多租户_Activiti中具有独立数据库架构的多租户
- [Python][小知识][NO.3] Python 使用系统默认浏览器打开指定URL的网址
- JAVA Stack栈和Heap堆的区别(转)
- HDU 6064 RXD and numbers
- 点击li标记中的a标记改变li背景图片怎样实现
- 计算机组成原理课程(唐朔飞)最全笔记
- python3.6实现的A星算法
- ATTCK v10版本战术介绍—资源开发
- 这几个摸鱼神器,你怎么能不知道
- 调用模板类出现undefined reference to的情况及解决方案
- Byte的数值范围为何是-128到127
- 强强联手:诚迈科技携手研华共同发起嵌入式Linux和Android联盟
- Centos查看端口占用