2012.10.08 安卓游戏开发笔记(十二)_Bitmaps的位图渲染于操作

本文详细介绍了如何在Android中进行位图的基本操作,包括位图的获取、绘制、旋转、平移、缩放及镜像等,并提供了具体的实现代码示例。

Bitmaps:

1) 位图的获取:采用位图工厂

	Bitmap bit = BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);

2) 位图的绘制:canvas.drawBitmap();函数绘制位图

3) 位图的旋转,分为两种: 1> 使用save()和restore()旋转画布实现 

				canvas.save();				
				canvas.rotate(30, bit.getWidth()/2, bit.getHeight()/2);
				canvas.drawBitmap(bit, 0, 0, paint);
				canvas.restore();
				canvas.drawBitmap(bit, 100, 0, paint);
    2>使用Matrix矩阵实现

				Matrix matrix = new Matrix();
				matrix.postRotate(30, bit.getWidth(), bit.getHeight());
				canvas.drawBitmap(bit, matrix, paint);
4) 位图的平移1> canvas.translate(); new Matrix().posttranslate();

5) 位图的缩放1>canvas.scale(floate x,float y,float px,float py),前两个分别对画布x,y的缩放比例,后两个为缩放的坐标 ; 2>new Matrix().postscale();(先使用translate)同上

6) 位图的镜像 只是把scale中参数作为修改第一个参数-1为x轴的镜像,第二个参数-1为y轴方向的镜像;

### 如何使用 `defaultdict` 初始化嵌套字典 在 Python 中,`collections.defaultdict` 是一种非常方便的数据结构,可以用来简化嵌套字典的初始化过程。相比于手动检查键是否存在并赋值的方式,`defaultdict` 提供了一种更优雅的方法。 以下是通过 `defaultdict` 创建嵌套字典的一个示例: ```python from collections import defaultdict # 定义一个辅助函数用于创建任意层数的嵌套字典 def nested_dict(): return defaultdict(nested_dict) # 使用该函数初始化嵌套字典 nested_dd = nested_dict() # 设置嵌套字典中的值 nested_dd['level1']['level2a']['key'] = 'value_a' nested_dd['level1']['level2b']['key'] = 'value_b' # 打印嵌套字典的内容 import json print(json.dumps(nested_dd, indent=4)) ``` 在这个例子中,定义了一个递归调用自身的函数 `nested_dict()`,它返回一个新的 `defaultdict` 实例[^5]。这样做的好处是可以动态地扩展字典层次而无需显式声明每一层的初始状态。 如果只需要固定层数的嵌套字典,则可以直接指定每层的默认工厂方法。例如,两层嵌套字典可以通过如下方式实现: ```python from collections import defaultdict # 创建两层嵌套的 defaultdict two_level_nested_dd = defaultdict(lambda: defaultdict(int)) # 给定一些数据填充到嵌套字典中 data = [('groupA', 'itemX'), ('groupB', 'itemY'), ('groupA', 'itemZ')] for group, item in data: two_level_nested_dd[group][item] += 1 # 输出结果 print(dict(two_level_nested_dd)) ``` 此代码片段展示了如何利用 `lambda` 表达式作为外层 `defaultdict` 的工厂函数,并以内层 `defaultdict(int)` 来计数项目出现次数[^6]。 需要注意的是,在设计嵌套字典时应遵循良好的命名约定,以便于理解各个层级的意义[^2]。此外,尽管浮点数或特殊值如 `np.nan` 可能被允许作为某些容器类型的键,但在实际应用中应当避免这种做法以减少潜在错误风险。 #### 总结 以上介绍了两种不同场景下使用 `defaultdict` 构建嵌套字典的技术方案:一是基于自定义递归函数支持无限级联;二是采用简单的 lambda 结构满足特定深度需求。这两种技术均有助于提高程序可读性和运行效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值