2013-07-17 10 views
6

Nel mio progetto ho un QLabel che cambio il pixmap di frequente in questo modo:(Qt C++) Ridimensiona pixmap e pixel di KEEP?

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

slot_pic è semplicemente una mappa 2D. Così si può guardare più chiaro come questo:

ui->frameLabel->setPixmap(pixmap); 

L'immagine è 16x16 in termini di dimensioni e la mia etichetta è 32x32. Ho ridimensionato i contenti in modo che quando la pixmap cambia, l'immagine ha una dimensione doppia. Tuttavia, l'immagine è ora sfocata. Capisco perché, ma mi stavo chiedendo se c'è un modo per farlo rimanere pixellato. Voglio solo avere un'immagine pixelata più grande. (L'immagine è da Minecraft se questo ti aiuta a capire cosa intendo)

Grazie per il vostro tempo :)

+0

Ci sono alcuni 'RenderHints' che è possibile impostare in un' QPainter'. Lì puoi disabilitare l'antialiasing. Non sono sicuro su come ottenere 'QLabel :: paintEvent' per usare questo flag. –

+0

Non ho mai avuto problemi con QPainter, quindi dovrò esaminarlo. La pixmap non viene creata nel mio programma, solo per quello che sai. È solo un file png delle risorse. Ho un'immagine più piccola e quando fai clic su di essa, un'etichetta mostra la stessa immagine ma più grande. – mrg95

risposta

15

Non lasciate che il QLabel fare il ridimensionamento. Invece, fai il ridimensionamento da solo usando QPixmap::scaled(). Qualcosa di simile a questo:

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

Il parametro importante è l'ultimo, transformMode, che indica se il filtraggio bilineare viene utilizzato o meno.

+0

Questo ha funzionato PERFETTAMENTE. Zero errori ed è stato semplice. Grazie :) – mrg95

+0

Grazie per la bella risposta. So di questo e stavo pensando di utilizzare questa tecnica, ma sto cercando qualcosa che può essere impostato direttamente in Qt Designer (se possibile) usando il foglio di stile! Qualcosa del genere? Chiunque? – zeFree