编程题:图像旋转
手机的图片编辑有水平翻转、垂直翻转功能,这些很快就有了思路,然而**旋转**功能让我很费了番脑筋:
- 旋转360度就绕回来了,所以只需考虑整除360后的余数。
- **规定左旋为正,右旋为负**。那么右旋X度(X < 0)等于左旋(360+X)度,实现了左旋也能解决右旋。
- 斜着转出半个像素绝对要疯,咱只考虑以90度为单位的旋转,那么还剩左旋90、180、270三种情况。
- 左旋180、270度显然可以通过连续两次、三次的左旋90度实现。于是只需搞定**左旋90度**即可。
说到图像(image):
- 图像由很多称为**像素pixel**的小点构成,排成矩形点阵,用二维数组保存就行。
- 每个像素由红Red、绿Green、蓝Blue、透明度Alpha四种分量构成,各8-bit,可用uint32_t保存。
先导题目:字节解析、字节序。
#### 输入规格
- 数据有多组输入,处理到EOF为止。每组输入的内容是:
- 首先读入两个正整数:宽度W、高度H,表示图片尺寸。共H行、每行W个、总共W * H个像素。
- 接下来有H行、每行W个像素值。像素格式为ABGR32,即AABBGGRR,共8位十六进制数,红色在最低字节。像素间由空格隔开。
- 图像宽、高都不超过1024。
#### 输出规格
- 对各组输入,输出左旋90度后结果:
- 行 列
- 逐行按ABGR32格式输出像素数据,十六进制数字如是字母要大写。像素间由空格隔开。
#### 样例输入
in
1 1
01020304
2 3
0A0B0C00 0A0B0C01 0A0B0C02
0A0B0C03 0A0B0C04 0A0B0C05
#### 样例输出
out
1 1
01020304
3 2
0A0B0C02 0A0B0C05
0A0B0C01 0A0B0C04
0A0B0C00 0A0B0C03
#### 样例解释
- 数据1:1行1列的图像左旋90度。
- 数据2:2行3列的图像左旋90度变为3行2列。
答案:若无答案欢迎评论
- 旋转360度就绕回来了,所以只需考虑整除360后的余数。
- **规定左旋为正,右旋为负**。那么右旋X度(X < 0)等于左旋(360+X)度,实现了左旋也能解决右旋。
- 斜着转出半个像素绝对要疯,咱只考虑以90度为单位的旋转,那么还剩左旋90、180、270三种情况。
- 左旋180、270度显然可以通过连续两次、三次的左旋90度实现。于是只需搞定**左旋90度**即可。
说到图像(image):
- 图像由很多称为**像素pixel**的小点构成,排成矩形点阵,用二维数组保存就行。
- 每个像素由红Red、绿Green、蓝Blue、透明度Alpha四种分量构成,各8-bit,可用uint32_t保存。
先导题目:字节解析、字节序。
#### 输入规格
- 数据有多组输入,处理到EOF为止。每组输入的内容是:
- 首先读入两个正整数:宽度W、高度H,表示图片尺寸。共H行、每行W个、总共W * H个像素。
- 接下来有H行、每行W个像素值。像素格式为ABGR32,即AABBGGRR,共8位十六进制数,红色在最低字节。像素间由空格隔开。
- 图像宽、高都不超过1024。
#### 输出规格
- 对各组输入,输出左旋90度后结果:
- 行 列
- 逐行按ABGR32格式输出像素数据,十六进制数字如是字母要大写。像素间由空格隔开。
#### 样例输入
in
1 1
01020304
2 3
0A0B0C00 0A0B0C01 0A0B0C02
0A0B0C03 0A0B0C04 0A0B0C05
#### 样例输出
out
1 1
01020304
3 2
0A0B0C02 0A0B0C05
0A0B0C01 0A0B0C04
0A0B0C00 0A0B0C03
#### 样例解释
- 数据1:1行1列的图像左旋90度。
- 数据2:2行3列的图像左旋90度变为3行2列。
答案:若无答案欢迎评论