2011-10-05 20 views
6

Tôi thấy sự cố nhất quán với MPMediaItemArtwork ở chỗ nó trả lại tác phẩm nghệ thuật ở kích thước khác với thứ tôi yêu cầu.MPMediaItemArtwork trả về tác phẩm nghệ thuật có kích thước sai

Mã Tôi đang sử dụng là như sau

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

này hoạt động như mong đợi, ngoại trừ kích thước của hình ảnh trở lại luôn là {320.0f, 320.0f} mặc dù tôi đặc biệt yêu cầu {128.0f, 128.0f} và nó gây ra một số vấn đề bộ nhớ do với những hình ảnh có kích thước gấp hai lần so với những hình ảnh được mong đợi.

Có ai khác đã chứng kiến ​​sự cố cụ thể này. Làm thế nào bạn giải quyết nó?

Táo docs đề nghị này nên làm việc như tôi mong nó chứ không phải là làm thế nào nó thực sự là

Trả lời

9

Tôi đã tải về AddMusic sample source từ Apple mà còn sử dụng MPMediaItemArtwork chỉ để xem cách họ xử lý mọi thứ.

Trong file MainViewController.m của dự án đó, những dòng này:

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

luôn trả về một hình có kích thước 55 x 55 tại thang điểm 1.0.

Tôi muốn nói rằng MPMediaItemArtwork không tôn trọng tham số kích thước được yêu cầu là lỗi mà bạn nên gửi qua bugreporter.apple.com, mặc dù Apple cũng có lý do "55 x 55" là kích thước tối ưu được hiển thị trên iPad & iPhone.

Đối cùn thay đổi kích thước lực UIImage, tôi khuyên bạn nên sử dụng Trevor Harman của "UIImage + Resize" phương pháp tìm thấy ở đây: http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way

Và một khi bạn thêm phần mở rộng chủng loại của mình để dự án của bạn, bạn có thể làm mong muốn bộ nhớ bảo tồn của bạn thay đổi kích thước bằng một cuộc gọi đơn giản như thế này:

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

Tôi nộp này là một lỗi trong hệ thống lỗi phóng viên của Apple -

+0

này là tốt để biết, tôi nghĩ hoặc là tôi đang diễn ra điên hay đã xảy ra sự cố với thiết bị của tôi. Tôi đánh giá cao bạn đã gửi lỗi; bạn có thể cập nhật bài đăng này nếu bạn nhận được phản hồi từ Apple không? –

+0

Tôi đã thay đổi kích thước hình ảnh theo cách thủ công nhưng tôi sử dụng Matt Gemmells [MGImageUtilities] (http://mattgemmell.com/2010/07/05/mgimageutilities/) như khi tôi thử liên kết ở trên chất lượng hình ảnh đã được chỉnh sửa lại rất kém nó không tính đến quy mô cho các thiết bị có khả năng Retina. –

0

Sử dụng Trevor Harman của "UIImage + Resize" loại đó là đơn giản để thêm loại thay đổi kích thước cho MPMediaItemArtwork để có được những hình ảnh thay đổi kích cỡ cho một kích thước và nội suy chất lượng nhất định:

@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 

Bằng cách này chỉ cần gọi

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

Tôi đã đề cập đến các nhận xét cho câu trả lời rằng tôi đã định lại kích thước hình ảnh theo cách thủ công, nhưng tôi sử dụng mã của Matt Gemmell là Trevor Harman không tính đến các thiết bị Retina . Tuy nhiên, vấn đề của tôi là với phương pháp của Apple không trả về một hình ảnh có kích thước theo những gì tôi yêu cầu, mà đã được nêu ra như một lỗi. –

Các vấn đề liên quan