我的图像不是正方形(m x n维)。它的尺寸也不是基座2(即m = 2 ^ k& n = 2 ^ k)。我通过使用以下方法将图像放在一个更大的正方形(下一个2的幂)中来解决这个问题:
int width = (int)Math.ceil(Math.pow(2, Math.log(img.width)/Math.log(2)));
int height = (int)Math.ceil(Math.pow(2, Math.log(img.height)/Math.log(2)));
根据最大尺寸的产量,我将正方形设置为最大尺寸,即:
if (img.width > img.height) {
// draw width * width square
}
if (img.height > img.width) {
// draw height * height square
}
问题:
四叉树现在看起来完全不同,因为它将所有非图像节点存储在树中。这显然影响假定的图像数据(即最小/最大深度)和整个树形状本身。我的问题是,我是否以有效的方式这样做,如果是这样,我怎么不存储不属于图像的数据?如果不是绘制非方形图像的最佳方式,有人会指出我正确的方向吗?谷歌上的所有文章似乎都非常深入我的目的。
答案 0 :(得分:0)
关于四叉树的好处是它们将存储大量相同的数据。您的额外空白图像数据应该只是在您的整体存储大小上添加一点。我建议您在数据结构中添加一些额外的信息,以存储图像的实际原始尺寸。在反序列化四叉树时,您可以根据实际尺寸“剪切”额外部分以生成原始图像。
答案 1 :(得分:0)
也许不是让你的树终止于(名义上的)单个像素,它可以将p个像素的小块存储o个像素,对于某些p x o,这将使每边的块数为2的幂。这将使你的树表现得很好,代价是在结构中引入另一个概念。