原始的宏没有height参数

时间: 2023-09-16 16:10:00 浏览: 35
非常抱歉,我理解错了你的问题。既然原始的宏没有 `height` 参数,那么可以假设旋转前的位图宽度和高度相等,即正方形。在这种情况下,逆时针旋转90度后位图的宽度和高度仍然相等,也等于原始位图的宽度和高度。 因此,对于逆时针旋转90度后的位图,只需要将原始宏中的行和列索引互换即可。具体实现如下: ```c #define ROTATE_LEFT_90_BITMAP(pattern_array, width, row, col) \ ((*(uint8_t *)((uint8_t *)pattern_array + width * col + row / 8) & (1 << (7 - (row % 8)))) >> (7 - (row % 8))) ``` 在该宏中,`pattern_array` 表示位图数据的起始地址,`width` 表示位图的宽度,`row` 和 `col` 表示逆时针旋转90度后位图中的行和列索引。
相关问题

原始宏有四个参数

非常抱歉,我的回答有误。原始宏有四个参数,而不是三个参数。在这种情况下,将逆时针旋转90度的宏修改如下: ``` #define ROTATE_BITMAP(pattern_array, width, height, row_size) \ for (int i = 0; i < (width / 2); i++) { \ for (int j = 0; j < height; j++) { \ uint8_t temp = PATTERN_BITMAP(pattern_array, width, j, i); \ *((uint8_t *)pattern_array + width * j + i/8) &= ~(1 << (7-(i%8))); \ *((uint8_t *)pattern_array + width * j + i/8) |= (PATTERN_BITMAP(pattern_array, width, j, width-i-1) << (7-(i%8))); \ *((uint8_t *)pattern_array + width * j + (width-i-1)/8) &= ~(1 << (7-((width-i-1)%8))); \ *((uint8_t *)pattern_array + width * j + (width-i-1)/8) |= (temp << (7-((width-i-1)%8))); \ } \ } \ for (int i = 0; i < width; i++) { \ for (int j = i+1; j < height; j++) { \ uint8_t temp = PATTERN_BITMAP(pattern_array, width, i, j); \ *((uint8_t *)pattern_array + width * i + j/8) &= ~(1 << (7-(j%8))); \ *((uint8_t *)pattern_array + width * i + j/8) |= (PATTERN_BITMAP(pattern_array, width, j, i) << (7-(j%8))); \ *((uint8_t *)pattern_array + width * j + i/8) &= ~(1 << (7-(i%8))); \ *((uint8_t *)pattern_array + width * j + i/8) |= (temp << (7-(i%8))); \ } \ } \ for (int i = 0; i < height; i++) { \ for (int j = width; j > row_size; j--) { \ uint8_t temp = PATTERN_BITMAP(pattern_array, width, i, j-1); \ *((uint8_t *)pattern_array + width * i + j/8 - 1) &= ~(1 << (7-((j-1)%8))); \ *((uint8_t *)pattern_array + width * i + j/8 - 1) |= (temp << (7-((j-1)%8))); \ } \ } ``` 其中,pattern_array是要旋转的位图的数组指针,width表示每一行的字节数,height表示位图的行数,row_size表示位图每一行实际需要的字节数。该宏会将位图逆时针旋转90度,并将多余的列按顺序拼接到列的后面,最终结果会保存在原始的位图中。

请注意,原始宏传的参数不能变

感谢您的提醒。如果原始宏传的参数不能变,可以将逆时针旋转90度的宏修改如下: ``` #define ROTATE_BITMAP(bitmap, width, height) \ for (int i = 0; i < width / 2; i++) { \ for (int j = 0; j < height; j++) { \ uint8_t temp = PATTERN_BITMAP(bitmap, width, j, i); \ *((uint8_t *)bitmap + width * j + i/8) &= ~(1 << (7-(i%8))); \ *((uint8_t *)bitmap + width * j + i/8) |= (PATTERN_BITMAP(bitmap, width, j, width-i-1) << (7-(i%8))); \ *((uint8_t *)bitmap + width * j + (width-i-1)/8) &= ~(1 << (7-((width-i-1)%8))); \ *((uint8_t *)bitmap + width * j + (width-i-1)/8) |= (temp << (7-((width-i-1)%8))); \ } \ } \ for (int i = 0; i < width * height / 2; i++) { \ uint8_t temp = *((uint8_t *)bitmap + i); \ *((uint8_t *)bitmap + i) = *((uint8_t *)bitmap + width * height - 1 - i); \ *((uint8_t *)bitmap + width * height - 1 - i) = temp; \ } ``` 该宏在原来旋转90度的基础上,再将位图水平翻转一下,即可实现逆时针旋转90度的效果。

相关推荐

最新推荐

recommend-type

解决line-height=height元素高度但是文字并没有垂直居中的问题

先说下为什么line-height等于元素高度文字却没有垂直居中,其实line-height等于元素高度的时候文本并不是真的居中了,而是看着居中了,当元素高度和font-size差距较大的时候,这种不是真正的居中就越发的明显,这里...
recommend-type

CSS line-height行高上下居中垂直居中样式属性

常常使用line-height设置内容(图片、文字)行高上下居中样式效果。 一、line-height行高语法 复制代码代码如下:line-height:22px.jb51div{line-height:22px}line-height:200%.jb51div{line-height:200%} line-...
recommend-type

深入理解CSS行高line-height与文本垂直居中的原理

前言在CSS中,line-height 属性设置两段段文本之间的距离,也就是行高,如果我们把一段文本的line-height设置为父容器的高度就可以实现文本垂直居中了,比如下面的例子: 复制代码代码如下:&lt;!DOCTYPE ...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB柱状图在数据分析中的作用:从可视化到洞察

![MATLAB柱状图在数据分析中的作用:从可视化到洞察](https://img-blog.csdnimg.cn/img_convert/1a36558cefc0339f7836cca7680c0aef.png) # 1. MATLAB柱状图概述** 柱状图是一种广泛用于数据可视化的图表类型,它使用垂直条形来表示数据中不同类别或组别的值。在MATLAB中,柱状图通过`bar`函数创建,该函数接受数据向量或矩阵作为输入,并生成相应的高度条形。 柱状图的优点在于其简单性和易于理解性。它们可以快速有效地传达数据分布和组别之间的比较。此外,MATLAB提供了广泛的定制选项,允许用户调整条形颜色、