嵌入式 SDL进行图片的切割与移动

本文介绍了一位博主如何在嵌入式环境中使用SDL库将一张400*400像素的图片切割成四个圆形,并尝试将背景设为透明。博主在SDL_fun.h中创建了一个类来管理屏幕接口,并展示了drawClips方法的实现,用于图片切割。在main函数中,博主展示了图片切割的效果,但未能完全实现背景透明。最后,博主讨论了如何结合SDL的按键事件功能实现图片的移动。
摘要由CSDN通过智能技术生成
测试Demo,但不要以为就可以随意为之,良好的代码风格和设计思想在哪都是需要注意的

下面来看看博主的工程结构:

工程下多了一个sheet.jpg,这就是今天要用于切割的图片

图片是400 * 400 pixel(像素)
接下来我们要做的工作就是,把这张图切割成4个圆,并且把背景变成透明

说明:博主在SDL_fun.h这个头文件中增加了一个类,用于管理全局唯一的屏幕接口我的考虑是,screen surface实际上只需要建立一个。并且,其他的surface实际上都是“依赖”于这个surface才能显示出来的。在SDL中,多次SDL_SetVideoMode()的效果实际上是保留了最后一次的surface作为了screen surface,所以,多次SDL_SetVideoMode()其实是没有实际意义的。

01  
07  
08 #ifndef SDL_FUN_H_
09 #define SDL_FUN_H_
10  
11 #include
12 #include
13  
14 class ScreenSurface{
15  
16 public:
17 ScreenSurface(SDL_Surface* screen);
18 ScreenSurface(int width, int height, int bpp = 32, Uint32 flags = SDL_SWSURFACE);
19 ~ScreenSurface(void);
20 bool flip(void) const;
21 SDL_Surface* acquire(void);
22  
23 private:
24 SDL_Surface* screen;
25 };
26  
27 void drawBitmap(ScreenSurface s, const char* fileName);
28 void readKeyboard(ScreenSurface s);
29 void getRadioInfo(ScreenSurface s);
30 void renderPictures(ScreenSurface s, const char* fgFile, const char* bgFile);
31 void drawClips(ScreenSurface s, const char* file, SDL_Rect* clip = NULL, int size = 0);
32  
33 #endif
大家看到了吧,其中的ScreenSurface的flip方法是将数据化的SDL_Surface Push到屏幕上,让用户看到,而acquire是获取当前的屏幕接口,其他的就是一些构造方法和构析方法。下面的方法都需要传一个ScreenSurface,这样是不是就统一管理了呢?全局就只需创建一个唯一的通向物理屏幕的接口~


头文件中的drawClips就是图片分割的方法,下面是它的实现:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值