MPMediaItemArtwork devolviendo ilustraciones de tamaño incorrecto

Estoy viendo un problema consistente con MPMediaItemArtwork en el hecho de que está volviendo ilustraciones en un tamaño diferente al que solicito.

El código que estoy usando es el siguiente

MPMediaItem *representativeItem = [self.representativeItems objectAtIndex:index]; MPMediaItemArtwork *artwork = [representativeItem valueForProperty:MPMediaItemPropertyArtwork]; UIImage *albumCover = [artwork imageWithSize:CGSizeMake(128.0f, 128.0f)]; 

Esto funciona como se esperaba, excepto que el tamaño de la image devuelta siempre es {320.0f, 320.0f} aunque solicité específicamente {128.0f, 128.0f} y causa algunos problemas de memory debido a que las imágenes son más del doble del tamaño de los esperados

¿Alguien más ha sido testigo de este problema en particular? ¿Cómo lo resolviste?

Los documentos de las manzanas sugieren que esto debería funcionar como lo esperaba en lugar de cómo es realmente

Descargué la fuente de muestra AddMusic de Apple que también usa MPMediaItemArtwork solo para ver cómo manejaban las cosas.

En el file MainViewController.m de ese proyecto, estas líneas:

 // Get the artwork from the current media item, if it has artwork. MPMediaItemArtwork *artwork = [currentItem valueForProperty: MPMediaItemPropertyArtwork]; // Obtain a UIImage object from the MPMediaItemArtwork object if (artwork) { artworkImage = [artwork imageWithSize: CGSizeMake (30, 30)]; } 

siempre devuelve una image de tamaño 55 x 55 a una escala de 1.0.

Yo diría que MPMediaItemArtwork no respeta los parameters del tamaño solicitado es un error que debe archivar a través de bugreporter.apple.com, aunque Apple también podría tener una excusa de que "55 x 55" es un tamaño óptimo para mostrarse en iPads e iPhones.

Para networkingucir el tamaño de UIImage de fuerza contundente, recomiendo utilizar los methods "UIImage + Resize" de Trevor Harman que se encuentran aquí: http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right- path

Y una vez que agregue sus extensiones de categoría a su proyecto, puede hacer su memory deseada conservando el tamaño del tamaño con una llamada simple como esta:

 UIImage *albumCover = [artwork imageWithSize:CGSizeMake(128.0f, 128.0f)]; UIImage *resizedCover = [albumCover resizedImage: CGSizeMake(128.0f, 128.0f) interpolationQuality: kCGInterpolationLow]; 

Usando la categoría "UIImage + Resize" de Trevor Harman, es simple agregar categoría de cambio de tamaño a MPMediaItemArtwork para get la image networkingimensionada para un cierto tamaño y calidad de interpolación:

 @interface MPMediaItemArtwork () - (UIImage *)resizedImage:(CGSize)newSize interpolationQuality:(CGInterpolationQuality)quality; @end @implementation MPMediaItemArtwork (Resize) - (UIImage *)resizedImage:(CGSize)newSize interpolationQuality:(CGInterpolationQuality)quality { return [[self imageWithSize:newSize] resizedImage: newSize interpolationQuality: quality]; } @end 

De esta forma simplemente llama

 CGSize thumbnailSize = CGSizeMake(128.0, 128.0); MPMediaItemArtwork *artwork = [myMediaItem valueForProperty:MPMediaItemPropertyArtwork]; UIImage *resizedArtwork = [artwork resizedImage:thumbnailSize interpolationQuality:kCGInterpolationMedium];