Растягивание изображения и выбор доминирующего цвета, как это делает iTunes

Как я могу добиться того, что делает iTunes? Обложка альбома растягивается и размывается, также она выбирает цвета с изображения и использует эти цвета для текста.

Ссылка на изображение

Для размытия я знаю, как это сделать. Но как я могу растянуть изображение, сохранив соотношение сторон? В NSImageView для этого нет опции... только растяжение по обеим осям.

Вопрос 2:

  1. Как растянуть изображение до контейнера, сохранив соотношение сторон?
  2. Как выбрать доминирующие цвета на изображении?

Чтобы лучше объяснить растяжение изображения, которое я хочу, вот пример, показывающий, как изображение должно масштабироваться в зависимости от ширины или высоты контейнера.

введите здесь описание изображения


person Fr0z3n    schedule 12.06.2016    source источник
comment
В заголовке вашей темы написано «Пользовательский NSView с размытым изображением», как это делает iTunes, предлагая, как будто вам нужно знать, как размыть изображение. Затем вы говорите, что знаете, как это сделать. Так в чем твоя точка зрения? Почему бы не прояснить это с заголовком?   -  person El Tomato    schedule 12.06.2016
comment
Возможно, вы захотите просмотреть это руководство по определению доминирующего цвета.   -  person Utkarsh Sinha    schedule 17.07.2016


Ответы (1)


Ребята из Panic написали хороший отчет о том, как выбирать цвета (с образцом приложения).

https://github.com/panicinc/ColorArt

NSImageValue имеет setImageScaling:

NSImageScaleProportionallyUpOrDown, // Scale image to maximum possible dimensions while (1) staying within destination area (2) preserving aspect ratio

что, кажется, соответствует тому, что вы говорите.

person Darren Ford    schedule 14.06.2016
comment
Спасибо за ссылку, именно то, что мне было нужно. Для изображения это не совсем то, что я хочу. Я хочу, чтобы изображение всегда покрывало контейнер, даже если оно превышало контейнер. Если у меня есть изображение 50x50, а размер контейнера 50x30, изображение должно оставаться размером 50x50, заполняя контейнер, даже если высота контейнера меньше высоты изображения. - person Fr0z3n; 14.06.2016