【问题标题】:(Qt C++) Resize pixmap and KEEP pixelation?(Qt C++)调整像素图大小并保持像素化?
【发布时间】:2013-07-15 14:23:18
【问题描述】:

在我的项目中,我有一个 QLabel,我经常像这样更改像素图:

ui->frameLabel->setPixmap(slot_pic[blockId[currentSlot]][damageId[currentSlot]]);

slot_pic 只是一个 2d 地图。所以你可以这样看更清楚:

ui->frameLabel->setPixmap(pixmap);

图片大小为 16x16,我的标签为 32x32。我已经检查了 scaledContents,所以当像素图发生变化时,图像的大小会增加一倍。但是,现在图像很模糊。我明白为什么,但我想知道是否有办法让它保持像素化。我想要一个更大的像素化图像。 (图片来自 Minecraft,如果这有助于您理解我的意思)

感谢您的宝贵时间 :)

【问题讨论】:

  • 您可以在QPainter 中设置一些RenderHints。在那里您可以禁用抗锯齿。我不确定如何让QLabel::paintEvent 使用此标志。
  • 我从来没有弄乱过 QPainter,所以我得研究一下。我的程序中没有创建像素图,你知道的。它只是一个资源png文件。我有一个较小的图像,当您单击它时,标签会显示相同的图像但更大。

标签: c++ qt interpolation image-resizing qpixmap


【解决方案1】:

不要让 QLabel 进行缩放。相反,请使用QPixmap::scaled() 自己进行缩放。像这样的:

ui->frameLabel->setPixmap(
    pixmap.scaled(32, 32, Qt::IgnoreAspectRatio, Qt::FastTransformation));

重要的参数是最后一个,transformMode,它告诉我们是否使用双线性过滤。

【讨论】:

  • 这非常有效。零错误,很简单。谢谢你:)
  • 感谢您的精彩回答。我知道这一点并且正在考虑使用这种技术,但我正在寻找可以使用样式表直接在 Qt 设计器中设置的东西(如果可能的话)!有这样的吗?有人吗?
猜你喜欢
  • 2011-08-22
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2014-07-18
  • 2012-11-15
相关资源
最近更新 更多