Задать вопрос

Как найти необходимую ширину и высоту трех изображений?

Есть tableRow, в него помещаются три ImageView. В ImageView загружаются фотографии различных размеров. Необходимо изменить масштаб каждой фотографии (подогнать под одну высоту) соблюдая правильную ширину изображений.

На данном ресурсе уже задавал аналогичный вопрос, только по двум изображениям: ссылка
В итоге для двух изображений Получилось следующее:
float image1Width = Utils.getDownloadedImageWidth(post, indexImage1);
float image2Width = Utils.getDownloadedImageWidth(post, indexImage2);
float image1Height = Utils.getDownloadedImageHeight(post, indexImage1);
float image2Height = Utils.getDownloadedImageHeight(post, indexImage2);
float scale = Math.max(image1Height, image2Height);
float newImage1Width = (scale / image1Height) * image1Width;
float newImage2Width = (scale / image2Height) * image2Width;
float k1 = MainActivity.SCREEN_WIDTH / (image2Width * (image1Height / image2Height + image1Width / image2Width));
float k2 = k1 * (image1Height / image2Height);
float tempHeight1 = k1 * image1Height;
float tempHeight2 = k2 * image2Height;
float tempHeight = Math.max(tempHeight1, tempHeight2);

Где tempHeight - необходимая высота, а newImage1Width и newImage2Width - ширина.
Как данный алгоритм модифицировать для трех изображений?
  • Вопрос задан
  • 222 просмотра
Подписаться 1 Оценить 4 комментария
Решения вопроса 1
sergiks
@sergiks Куратор тега Алгоритмы
♬♬
W ширина области, в которую надо вписать комплект картинок
H высота области.

У n-й картинки:
  • iwn - своя ширина
  • ihn - своя высота
  • kn = iw / ih пропорция


Для каждой, в итоге, надо найти индивидуальный коэффициент масштабирования sn.

Сложив пропорции w/h картинок, получим пропорцию их блока, когда все одной высоты:
K = k0 + k1 + k2
  • К == W/H области, куда надо вписать конструкцию значит что картинки идеально впишутся
  • К > W/H значит, высота будет недостаточна, останется место сверху и снизу.
  • К < W/H значит, высота впишется, а слева+справа останется лишнее место - его за счёт межкартиночных интервалов можно распределить.


Исходя из сравнения считаем высоту блока Hb. Она либо равна W / K, когда K > W/H; либо равна H.

Теперь остаётся сосчитать индивидуальные коэффициенты:
sn = Hb / ih

На этот коэффициент нужно умножить начальные размеры картинки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы