4
使用线条重现图像
编写一个程序,以获取真彩色RGB图像I,要绘制的最大行数L以及每行的最小m和最大M长度。输出看起来像I的图像O,它使用L或更少的直线绘制,所有直线的欧几里德长度在m和M之间。 每条线必须是一种纯色,并且两个端点都在O的边界内,并使用Bresenham的线算法(大多数图形库已经为您完成)绘制。个别线只能是1像素粗。 所有行,即使长度为0的行也应至少占用一个像素。线可以画在彼此的顶部。 在绘制任何线条之前,您可以将O的背景初始化为任何纯色(可能取决于I)。 细节 O应具有与I相同的尺寸。 L将始终是一个非负整数。它可能大于I的面积。 m和M是M > = m的非负浮点数。两个像素之间的距离是其中心之间的欧式距离。如果此距离小于m或大于M,则不允许这些像素之间的线。 线路不应该抗锯齿。 不应使用不透明度和Alpha。 您的程序在像样的现代计算机上以不到100万像素和L不到10,000的图像运行,不应该花一个多小时。 测试影像 当然,您应该向我们展示最准确或最有趣的输出图像(我希望当L占I像素数的5%至25%之间,而m和M约为对角线大小的十分之一时,会出现这种图像。) 这是一些测试图像(单击获取原始图像)。您也可以自己张贴。 简单的图片: 这是一次人气竞赛。投票最高的提交者获胜。 笔记 让L从I中总像素的百分比以及绝对值中导出可能会有所帮助。例如>>> imageliner I=img.png L=50% m=10 M=20,>>> imageliner I=img.png L=32 m=10 M=20就像img.png是8×8像素的图像一样。对于m和M可以做类似的事情。这不是必需的。 由于线不能超出范围,所以最长的线可能是I的对角线长度。有中号比这更高不应破坏任何东西,虽然。 自然地,如果m为0且L大于或等于I中的像素数,则O在每个像素位置的长度为0“线”,则可以等于I。不需要此行为。 可以说,复制I的形状比复制颜色更重要。您可能需要研究边缘检测。