将图像缩小为矩形的算法?

时间:2009-12-03 15:50:03

标签: c# algorithm bitmap rectangles

我正在尝试在C#应用程序中创建相当大的位图(6000x6000,尽管大多数是透明的),并且需要将它们绘制到仅支持绘制矩形的特定输出API。

现在,我想知道是否有人使用算法将位图缩减为一系列类似颜色的位图的填充矩形;因为将所有内容绘制为1x1矩形对于此目的来说太慢了。例如,圆应该缩小为一个大的中心矩形,而圆的其余部分则缩小为有效的矩形。算法甚至不需要那么快,因为我的单像素方法花费的大部分时间是通过循环API本身的每个矩形。

2 个答案:

答案 0 :(得分:3)

听起来你需要经典的QuadTree结构。有关如何使用四叉树将图像量化为矩形的详细说明,请参阅此链接。

这是CodeProject的一个很好的参考,提供了一个可以根据需要改变的示例,简单实现。

答案 1 :(得分:0)

一个简单的算法就是绘制1xN矩形。

从第0行开始,找到第一个非空白像素。继续迭代像素,直到您正在查看的像素的颜色发生变化。现在绘制一系列相同颜色的像素作为1xN矩形。

如果您的实际照片有大的均匀区域,这可能“足够好”。根据图片的外观,绘制垂直线可能会更好。

如果我正在进行数学运算,使用此方法,半径为100像素的圆将使用200“线”绘制,而不是30,000像素,如果一次完成一个像素。在我看来,如果幸运的是象限落在哪里,四元树分解将使用至少1000个或更多的矩形。