Если размер «максимального датчика» объектива составляет 8,8 × 6,6 мм, то круг изображения, проецируемый на датчик, представляет собой всего лишь диагональ датчика, 11 мм (от Пифагора: √ (8,8 ² + 6,6 ²)).
Диагональ датчика 25 мм × 25 мм имеет диагональ 35,4 мм, что в 3,21 раза больше, чем у круга объектива.
Таким образом, вам необходимо «увеличить» фокусное расстояние объектива в 3,21 раза. Или, другими словами, помимо встроенного фокусного расстояния объектива, вам необходимо добавить 2,21, умноженное на фактическое фокусное расстояние. 2,21 × 35 мм = 77,5 мм удлинения .
Это создаст круг изображения с той же степенью виньетирования на сенсоре 25 мм × 25 мм, что и на датчике 8,8 × 6,6 мм (где «степень виньетирования» – это количество остановок потери света в зависимости от процентное расстояние от центра объектива до угла датчика).
Это большое расширение будет иметь существенное влияние на вашу способность фокусироваться. При добавлении расстояния между объективом и корпусом камеры (с удлинительными трубками, сильфоном и т. Д.) Возникают два основных эффекта:
- вы можете сфокусироваться ближе, чем могли бы без расширения (минимальное расстояние фокусировки уменьшается); и
- Вы больше не можете фокусироваться далеко, например, бесконечность (максимальное расстояние фокусировки уменьшается).
Насколько уменьшается максимальное фокусное расстояние?
Давайте сначала сфокусируем объектив с фокусным расстоянием ƒ на бесконечности, которое является «родным» максимальным фокусным расстоянием. Затем, не меняя кольца фокусировки на объективе, давайте установим удлинительную трубку длиной X между объективом и корпусом камеры.
Новое максимальное фокусное расстояние D ‘ определяется по формуле
D ‘ = ƒ * (1 + ƒ / X )
В вашем конкретном случае, X = ƒ × 2,21, поэтому уравнение становится D ‘ = ƒ * (1 + 1 / 2,21) = 1,45 ƒ = 51 мм. (!)
Это означает, что для объектива, который вы пытаетесь использовать, если вы хотите, чтобы он проецировал окружность изображения на датчик, который в 3,21 раза больше, чем он был предназначен, если вы добавите правильное расширение, вы можете фокусировка только до 51 мм перед объективом .
То, что вы хотите сделать, это возможно , но это, вероятно, не практично для любого реального интересного использования.
Источник
#ios #swift #uiimageview #uibezierpath #cashapelayer
#iOS #swift #uiimageview #uibezierpath #cashapelayer
Вопрос:
В настоящее время у меня есть представление изображения, которое содержит круглое изображение.
Я настроил это так:
profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
profileImageView.clipsToBounds = true
Я пытаюсь нарисовать дугу вокруг круга, используя UIBezierPath, и я хотел бы передать радиус изображения для параметра radius.
let circlePath = UIBezierPath(arcCenter: CGPoint(x: profileImageView.frame.size.width/2, y: profileImageView.frame.size.height/2), radius: IMG_VIEW_RADIUS, startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
Как бы я это сделал?
Комментарии:
1. разве вы не можете использовать границу просмотра изображения
2. Я уже настроил это, но я хотел бы также создать дугу, которая перекрывает границу
3. Просто хак — почему бы не создать другой вид изображения, прозрачный для этого, и просто добавить его границу. Укажите вторую высоту ширины изображения, уменьшенную на 1 от первой, и добавьте поверх первого изображения
4. ооооо, звучит неплохо. Я собираюсь попробовать это
5. Другой способ размещен в качестве ответа
Ответ №1:
Swift 3.0
Другой способ
Я только что добавил изображение, подобное этому
let imageView = UIImageView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
imageView.backgroundColor = UIColor.green
imageView.layer.cornerRadius = imageView.frame.size.width / 2
imageView.clipsToBounds = true
self.view.addSubview(imageView)
Подробнее ...