0

我有一个不是正方形的图像(mxn 尺寸)。此外,它的尺寸不是以 2 为底的(即 m not = 2^k & n not = 2^k)。我已经通过使用以下方法将图像放置在一个更大的正方形(二的下一个幂)中来解决这个问题:

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
}

问题:

四叉树现在看起来完全不同,因为它在树中存储了所有非图像节点。这显然会影响假定的图像数据(即最小/最大深度)和整个树形本身。我的问题是,我是否以有效的方式执行此操作,如果是,我如何不存储不属于图像的数据?如果这不是绘制非方形图像的最佳方法,有人可以指出我正确的方向吗?对我而言,谷歌上的所有文章似乎都太深入了。

4

2 回答 2

0

也许不是让你的树终止于(名义上的)单个像素,它可以存储 p 像素乘 o 像素的小块,对于某些 pxo,这将使每边的块数成为 2 的幂。这将使你的树表现得很好,但代价是在结构中引入了另一个概念。

于 2011-02-17T18:44:13.903 回答
0

四叉树的好处是它们将存储大量相同的数据。您额外的空白图像数据应该只会增加您的整体存储大小。我建议,您在存储图像实际原始尺寸的数据结构中添加一些额外的信息。在反序列化您的四叉树时,您可以根据实际尺寸“切断”额外的部分以生成原始文件。

于 2011-02-17T16:19:11.980 回答