ImageWithSize для MPMediaItemArtwork возвращает очень маленькое изображение обложки (55 x 55 пикселей)

Я пытаюсь создать очень простой музыкальный проигрыватель (для маленьких детей) в Monotouch, и большая его часть работает просто отлично.

Однако, когда я перебираю MPMediaItems в списке воспроизведения и пытаюсь получить их обложку, я всегда получаю изображение размером 55 x 55 пикселей. Когда я слушаю песни во встроенном приложении для iPod, я вижу, что сохраненное изображение больше.

Платформа: новейшая моноразработка и монотач. iOS 4.2.3 на устройстве

Код для получения обложки первой песни в плейлисте:

MPMediaItem[] songs = foundPlaylist.Items;
MPMediaItemArtwork artwork = (MPMediaItemArtwork)songs[0].ValueForProperty(MPMediaItemProperty.Artwork);
var imageRect = artwork.ImageCropRectangle;
UIImage artWorkImage = artwork.ImageWithSize (imageRect);

Я довольно озадачен здесь. Любые идеи?

С наилучшими пожеланиями

Сорен


person jub    schedule 07.03.2011    source источник
comment
Посмотрите на код github.com/erica/MPMediaItem-Properties от erica. Это определенно поможет вам решить вашу проблему. Это проверенный код, и он работает как шарм для меня.   -  person Pragnesh Dixit    schedule 07.03.2011
comment
Спасибо, Прагнеш. Я взгляну. Но я использую монотонный код С#, а не собственный Objective C. Я пытался просто создать прямоугольник 256x256, как это делает erica в коде, но это дает мне ОЧЕНЬ пикселизированное изображение, поскольку исходное изображение имеет размер всего 55 x 55 пикселей. Так что либо я делаю что-то странное неправильно, либо в монотач есть ошибка. Но спасибо за ссылку на код!   -  person jub    schedule 07.03.2011
comment
может ли это быть связано с этим: bugzilla.novell.com/show_bug.cgi?id=657866   -  person Jason    schedule 07.03.2011
comment
Ну, вы никогда не знаете :-D, но ImageWithSize принимает RectangleF и работает так, как должно, но изображение, кажется, масштабируется из изображения 55 x 55 независимо от того, что я установил для прямоугольникаF.   -  person jub    schedule 08.03.2011
comment
Хорошо, я проверил код, на который вы мне указали, и он отлично работает. Большое спасибо за указатель. Я выясню, является ли это проблемой монотач или моя вина :-D   -  person jub    schedule 10.03.2011
comment
Подали отчет об ошибке #678480 на новеллах bugzilla, если кому-то интересно.   -  person jub    schedule 10.03.2011
comment
Пробовал делать точно так же. Получение обложки первой песни в первом плейлисте. Работает в XCode Objective-C, но в C# Monotouch результирующее изображение по-прежнему имеет размер всего 55 x 55 пикселей. Чертовски странно. Я думал, что монотач — это всего лишь тонкая оболочка поверх Apple API. Так что либо происходит что-то странное, либо я совсем сошел с ума..   -  person jub    schedule 16.03.2011


Ответы (1)


Оки, разобрался. Большое спасибо Кенгуру за моносенсорный чат!

В методе imageWithSize для MPMediaItemArtwork есть ошибка привязки, поэтому вам нужно напрямую сообщить селектору. Делается это таким образом (чтобы получить картинку 256х256):

UIImage artWorkImage = (UIImage) Runtime.GetNSObject (Messaging.IntPtr_objc_msgSend_SizeF (artwork.Handle, Selector.GetHandle ("imageWithSize:"), new SizeF (256, 256)));
person jub    schedule 17.03.2011