我这样做了吗?在Qt中扩展

时间:2017-05-19 10:12:49

标签: c++ qt

我编写了代码来进行2D转换:缩放。

(value =来自滑块1-10的变量)

int x=punktx.back();
int y=punkty.back();
DrawPixel(x*value/6.0,y*value/6.0,bits,255,255,255);

我收到了那个输出:

you can check here

正如你所看到的,我在那个广场上收到了一些休息时间。可以,或者我的代码错了吗?

2 个答案:

答案 0 :(得分:1)

这不是你在Qt中扩展事物的方式。请改用 QImage :: scaled() QPixmap :: scaled()方法。

关于你的问题,中断的结果是你使用相同数量的像素绘制大方块和小方块 - 你必须填充像素之间的间隙,但缩放这种方式不是'无论如何,如上所述,这是有意义的。

答案 1 :(得分:0)

问题是如果你迭代一个输入图像,例如10x10像素,并输出相同数量的像素,然后你只需绘制100个像素,无论你有多少"缩放"它。如果您要缩放它以填充20x20像素的大小,但您只绘制原始的100像素,当然它会有洞。

如果您想实现一个简单的缩放功能作为学习练习,有些方法是:

  • 不是每个原始像素绘制1个像素,而是以该像素的颜色绘制缩放尺寸的矩形。这样做的好处是它只对现有代码进行了微小的改动,因此首次尝试可能值得尝试。

  • 循环输出像素,然后插入输入图像上的位置(反转缩放),然后绘制一个正确颜色的像素。这避免了一些绘制大量矩形的开销(可能会多次绘制相同的输出像素)。

  • 如上所述,但将数据写入存储在内存中的位图,然后使用位图绘制命令一次性绘制。

此外,如果您真的想要获得更好的效果,您可以确定输出像素是否跨越多个输入像素,然后平均颜色,依此类推。这样可以获得更平滑的效果,但可能会使纯色图像模糊不清。