2009-07-28 13 views
12

Ho una piccola app IPhone su cui sto lavorando e sto visualizzando un'immagine con UIImageView. Lo sto ridimensionando usando la modalità Aspect Fit. Mi piacerebbe che l'immagine si ridimensionasse senza interpolazione/levigatura (voglio che appaia pixellata). C'è un modo per cambiare questo comportamento?UIImmagine scaling/interpolazione

Una domanda un po 'più generale sarebbe possibile implementare il mio algoritmo di ridimensionamento, o ci sono altri integrati in quelli che posso selezionare?

risposta

20

Lei avrebbe bisogno di impostare la proprietà magnificationFilter sul layer della vista al filtro vicino più prossimo:

[[view layer] setMagnificationFilter:kCAFilterNearest] 
+1

come la risposta di rekle dice, assicuratevi di aggiungere #import quando si utilizza setMagnificationFilter: –

+1

che è grande e raggiunge il mio scopo, ma voglio chiedere, quando uso 'magnificationFilter = kCAFilterNearest', i pixel grandi e nitidi ingrandiscono davvero i pixel originali dell'immagine, o sono solo prodotti da qualche elaborazione? Grazie! – Suge

-2

Ci sono due modi per farlo. È possibile implementare un algoritmo di riscalamento senza interpolazione. Se questo è troppo lavoro, puoi ridimensionare l'immagine in un'altra applicazione come gimp o photoshop. Ciò funzionerebbe a meno che non fosse necessario modificare la dimensione in modo dinamico nell'applicazione.

5

Assicurati di includere la linea

#import <QuartzCore/CALayer.h> 

Nella parte superiore del file che contiene il chiama a setMagnificationFilter o non verrà compilato.

+0

E aggiungi il framework QuartzCore al tuo progetto (Gruppi e File -> Aggiungi -> ExistingFrameworks ... -> QuartzCore.framework -> Aggiungi). – suda

0

Swift

imageView.layer.magnificationFilter = kCAFilterNearest 
imageView.layer.shouldRasterize = true