C++ QImage调整大小
我正在编写小型图形编辑器,需要一些帮助。 我正在画这样的奇玛格:C++ QImage调整大小,c++,qt,drawing,sprite,C++,Qt,Drawing,Sprite,我正在编写小型图形编辑器,需要一些帮助。 我正在画这样的奇玛格: void Editor::paintEvent(QPaintEvent *event) { QPainter painter(this); // zoom is an int, representing zoomFactor from 1 to 12. painter.drawImage( QRect(0, 0, image.width() * zoom , image.height()
void Editor::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
// zoom is an int, representing zoomFactor from 1 to 12.
painter.drawImage(
QRect(0, 0, image.width() * zoom , image.height() * zoom),
image);
if (zoom >= 3 && showGrid) {
painter.setPen(palette().foreground().color());
painter.setPen(Qt::DotLine);
// this is how I draw grid
for (int i = 0; i <= image.width(); ++i)
painter.drawLine(zoom * i, 0,
zoom * i, zoom * image.height());
for (int j = 0; j <= image.height(); ++j)
painter.drawLine(0, zoom * j,
zoom * image.width(), zoom * j);
}
// (...)
}
void编辑器::paintEvent(QPaintEvent*event)
{
油漆工(本);
//zoom是一个int,表示从1到12的zoomFactor。
画师(
QRect(0,0,image.width()*缩放,image.height()*缩放),
图像);
如果(缩放>=3&&showGrid){
painter.setPen(调色板().foreground().color());
painter.setPen(Qt::DotLine);
//这就是我画网格的方式
对于(int i=0;i处理高度缩放图像的代码在一段时间前已经在Qt中进行了“优化”,现在不幸的是出现了bug。我没有检查代码,但我的猜测是,用于绘制的纹理“速度”或“偏移量”在计算之前是用浮点计算的,而现在是用定点计算的
我不记得是哪一个版本引入的,但它在4.0之后很早就出现了。我们有一个应用程序,需要允许在缩放因子较高的点上放置亚像素精度和缩放的十字,您可以注意到图片“抖动”
我是第一个不会声称别人的代码中有bug的人,除非100%确定,但这是我确实100%确定的情况之一
唯一的解决方法是手动绘制缩放的图像,或者重新实现纹理映射代码,或者(如果您只需要int>1
zoom factors),使用drawRect
一次绘制一个像素……在PC上应该足够快
请注意,这个bug可能是视频驱动程序的常见bug,而不是Qt中的bug……我已经看到,我们的软件在不同的平台(Windows/Linux/OsX)上存在问题,实际上只有在使用QWidget
(而不是使用QGLWidget
)时才会出现IIRC问题。我很好奇——如果您的大图像是25x25(或28x28)问题是否仍然存在?如果不是,我会怀疑渲染正在缩放图像以适应其布局,布局大小为非平方比,宽度的缩放与高度的缩放无关。奇怪的是…只有当大小为16x16、32x32等时,它才能正常工作。看起来像是图像缩放中的舍入错误。这是什么平台?可能吗不复制,对我来说很好,Ubuntu 11.10KDE@winch请添加您的解决方案作为问题的答案,并接受它…而不是作为问题本身的更新。这是完全可以接受的(并受到鼓励)为了回答你自己的问题,如果你知道答案是什么。嗨,谢谢你的回答。我试着一个像素一个像素地画图像,效果也很好,但是当我尝试用image.setPixel函数在上面画东西时,它使用了很多CPU(25-99%)。当我用drawImage函数画图像时,这个问题不会发生。