2011-10-05 50 views
6

我看到MPMediaItemArtwork存在一致的问题,因为它返回的图稿大小与我请求的大小不同。MPMediaItemArtwork返回错误大小的艺术品

我正在使用的代码如下

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

可正常工作,但返回的图像的大小总是{320.0f, 320.0f}即使我特别要求将{128.0f, 128.0f},它是造成由于一些内存问题这些图像的尺寸是预期尺寸的两倍以上。

有没有其他人目睹这个特殊问题。你是如何解决它的?

苹果的文档表明这应该工作,因为我是期待,而不是它是如何为

回答

9

我从网上下载苹果AddMusic sample source也使用MPMediaItemArtwork只是为了看看他们是如何处理的事情。

在该项目中的MainViewController.m文件,这些行:

// 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)]; 
} 

总是以1.0的比例返回尺寸为55×55的图像。

我会说MPMediaItemArtwork不尊重所请求的大小参数是一个错误,你应该通过bugreporter.apple.com文件,虽然苹果也可能有一个借口,“55×55”是一些最佳尺寸显示在iPad上& iPhone。

对于钝力UIImage的大小调整,我建议用特雷沃 - 哈曼在这里找到了“的UIImage +调整大小”的方法:http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way

而且一旦你添加自己的类别扩展到你的项目,你可以做你所需要的存储节约用一个简单的呼叫这样的调整:

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

我在苹果公司的错误报告系统提交这个bug -

+0

这是很好的了解,我觉得要么我要疯了或我的设备出现问题。我感谢你提交错误;如果您收到Apple的回复,您是否可以更新此帖子? –

+0

我已经手动调整图像大小,但我使用马特Gemmells [MGImageUtilities](http://mattgemmell.com/2010/07/05/mgimageutilities/)当我尝试上面的链接调整后的图像质量非常差,因为它没有考虑Retina功能设备的规模。 –

0

使用特雷弗·哈曼“的UIImage +调整大小”的范畴很简单调整大小类别添加到MPMediaItemArtwork得到了一定的规模和插值质量调整后的图像:

@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 

这样只需要调用

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

我已经在评论中提到了答案,我已经手动调整图像大小,但是我使用Matt Gemmell的代码,因为Trevor Harman's没有考虑到Retina设备。然而,我的问题是苹果的方法没有返回一个尺寸与我所要求的尺寸相同的图像,这已经成为一个bug。 –