2012-07-08 6 views
8

Ho bisogno di un metodo per ridimensionare UIImage come in Photoshop con il ricampionamento "più vicino". Ne stavo cercando, ma tutto ciò che ho trovato riguarda gli spessori CoreGraphics per migliorare la qualità del ricampionamento bicubico. Ho un design in stile pixel nella mia app, e un sacco di cose che creo per pixel e poi lo ingrandisco con moltiplicatore x5 (e ci vuole un sacco di tempo, quindi mi avvicino persino alla scrittura di uno script per Photoshop). Per esempio:UIImmagine di ridimensionamento con bordi netti

enter image description here>enter image description here

Ma io davvero non hanno bisogno di questo risultato come di ricampionamento:

enter image description here

Forse qualcuno mi mostrerà la strada giusta.

+0

In aggiunta, posso dire di aver trovato un buon modo per l'elaborazione di immagini in batch con Photoshop "azioni". Ma ho ancora bisogno di una risposta per ridurre la dimensione delle immagini delle risorse archiviate. – kokoko

risposta

16

Quando si disegna l'immagine in un contesto grafico, è possibile impostare la qualità di interpolazione del contesto grafico a "nessuno", come questo (ad esempio nel metodo drawRect di vista):

CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextSetInterpolationQuality(c, kCGInterpolationNone); 
UIImage *image = [UIImage imageNamed:@"pixels.png"]; 
[image drawInRect:self.bounds]; 

Se è necessario il risultato come UIImage (ad esempio per assegnarlo a un controllo dell'interfaccia utente integrato), è possibile farlo con UIGraphicsBeginImageContext (troverete molti esempi per questo).

Un'alternativa sarebbe quella di impostare la proprietà magnificationFilter dello strato di una vista dell'immagine:

pixelatedImageView.layer.magnificationFilter = kCAFilterNearest; 

Questo è probabilmente più veloce e più memoria-efficiente, perché non c'è bisogno di ridisegnare l'immagine.

+0

Questa risposta sembra buona, ho bisogno di controllarlo presto in XCode per accettarlo. Grazie. – kokoko