2013-07-17 5 views
6

In meinem Projekt habe ich eine QLabel, dass ich die pixmap wie dies häufig ändern:(Qt C++) Größe der Pixmap und keep pixelation?

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

slot_pic ist einfach eine 2D-Karte. So kann man es auch klarer wie folgt aussehen:

ui->frameLabel->setPixmap(pixmap); 

Das Bild ist 16x16 in Größe und mein Label ist 32x32. Ich habe skalierte Inhalte überprüft. Wenn sich das Pixmap ändert, ist das Bild doppelt so groß. Das Bild ist jedoch jetzt verschwommen. Ich verstehe, warum, aber ich frage mich, ob es einen Weg gibt, es pixelig zu machen. Ich möchte nur ein größeres pixeliges Bild haben. (Das Bild ist von Minecraft, ob das hilft zu verstehen, was ich meine)

Vielen Dank für Ihre Zeit :)

+0

Es gibt einige 'RenderHints', die Sie in' QPainter' einstellen können. Dort können Sie Antialiasing deaktivieren. Ich bin mir nicht sicher, wie ich das 'QLabel :: paintEvent' dazu bringen kann, dieses Flag zu verwenden. –

+0

Ich habe mich nie mit QPainter beschäftigt, also muss ich mich darum kümmern. Das Pixmap wird nicht in meinem Programm erstellt, nur damit Sie es wissen. Es ist nur eine Ressource PNG-Datei. Ich habe ein kleineres Bild und wenn Sie darauf klicken, zeigt ein Etikett das gleiche Bild, aber größer. – mrg95

Antwort

15

Lassen Sie sich nicht die QLabel die Skalierung zu tun. Nehmen Sie stattdessen die Skalierung selbst vor, indem Sie QPixmap::scaled() verwenden. Etwas wie folgt aus:

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

Der wichtige Parameter ist die letzte, transformMode, die angibt, ob bilineare Filterung verwendet wird oder nicht.

+0

Dies funktionierte PERFEKT. Null Fehler und war einfach. Danke :) – mrg95

+0

Danke für die nette Antwort. Ich weiß davon und dachte darüber nach, diese Technik anzuwenden, aber ich suche nach etwas, das direkt im Qt Designer (wenn möglich) mit dem Stylesheet eingestellt werden kann! So etwas? Jemand? – zeFree