假设我有一个高度H
和宽度W
的图像。图像的原点位于左上角,以传统方式递增(y向下递增,x向右递增)。我们选择一个大小为b
的块,并将图像划分为b x b
块,在右边缘和下边缘可能有剩余,大小为rx x ry
、rx x b
和b x ry
rx
和ry
是映像模b
的余数,因此rx = W % b
和ry = H % b
以下是设置的描述:
如果图像高度和/或宽度是b
的整数倍,则rx
和ry
也可以是0。绿色斑点位于(block_upper_left_x, block_upper_left_y)
,并对块在图像上出现的位置进行编码
我想通过在x轴和y轴的中线上平移各个块来变换这个图像。生成的图像如下所示:
这不同于简单地在水平和垂直方向上翻转,这会产生以下图像:
我得到了一个数据结构中的图像,它表示这些块,块的高度和宽度以及底层的位图。它看起来像这样:
(block_width, block_height, block_upper_left_x, block_upper_left_y, bitmap[])
给定块中的位图不会改变,只是块之间的相对位置
因此,理想情况下,我希望找到一些简单地改变block_upper_left_x
和block_upper_left_y
的映射,但尝试使用铅笔和纸张却没有多少可供借鉴的地方。这是我做的一张桌子,可能有助于引导人们思考这个问题:
block_id | (block_ul_x_0, block_ul_y_0) | (block_ul_x_f, block_ul_y_f) | (d_ul_x, d_ul_y)
==============================================================================================
0 | (0, 0) | (rx + b, 2b) | (rx + b, 2b)
1 | (b, 0) | (rx, 2b) | (rx - b, 2b)
2 | (2b, 0) | (0, 2b) | (-2b, 2b)
3 | (0, b) | (rx + b, b) | (rx + b, 0)
4 | (b, b) | (rx, b) | (rx - b, 0)
5 | (2b, b) | (0, b) | (-2b, 0)
6 | (0, 2b) | (rx + b, 0) | (rx + b, -2b)
7 | (b, 2b) | (rx, 0) | (rx - b, -2b)
8 | (2b, 2b) | (0, 0) | (-2b, -2b)
目前没有回答
相关问题 更多 >
编程相关推荐