Размер наложения GPUImageUIElement
Я пытаюсь записать видео с наложенным текстом, используя библиотеку GPUImage. Запись с наложением пока работает, но я не могу добиться наложения, чтобы иметь правильный размер. Независимо от того, какой кадр я использую при инициализации, представление наложения всегда принимает весь размер слоя предварительного просмотра (GPUImageView). Я попытался добавить оверлей как в раскадровке, так и программно. Вот мой код:
camera = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPresetHigh, cameraPosition: AVCaptureDevicePosition.Back)
camera.outputImageOrientation = UIInterfaceOrientation.LandscapeRight
camera.horizontallyMirrorFrontFacingCamera = false
camera.horizontallyMirrorRearFacingCamera = false
filterView = self.view as! GPUImageView
filter = GPUImageBrightnessFilter()
blendFilter = GPUImageAlphaBlendFilter()
blendFilter.mix = 1.0
camera.addTarget(filter)
// here I try to add a label as UIElement
let label = UILabel(frame: CGRect(x: 10, y: 10, width: 100, height: 30))
label.text = "Demo text"
label.textColor = UIColor.redColor()
label.font = UIFont.systemFontOfSize(17.0)
label.backgroundColor = UIColor.clearColor()
view.addSubview(label) // for test purposes
uiElementInput = GPUImageUIElement(view: label)
filter.addTarget(blendFilter)
uiElementInput.addTarget(blendFilter)
blendFilter.addTarget(filterView)
filter.frameProcessingCompletionBlock = { filter, time in
self.uiElementInput.update()
}
camera.startCameraCapture()
Как я могу получить UIElement меньшего размера, как метка, как часть представления? Идея состоит в том, чтобы добавить предопределенный вид наложения (не только метку), но он также имеет неправильные размеры.
Спасибо!
1 ответ
Привет Андрей Гершенгорен,
Вы должны установить размер представления метки так же, как и для предустановленного размера сеанса захвата камеры.
Если вы выбираете AVCaptureSessionPreset640x480, вы должны установить размер метки (640, 480).
Я написал код для вас.
import UIKit
import GPUImage
class ViewController: UIViewController {
@IBOutlet weak var filterView: GPUImageView!
var videoCamera : GPUImageVideoCamera!
var uiElement: GPUImageUIElement!
var filter:GPUImageBrightnessFilter!
var blendFilter: GPUImageAlphaBlendFilter!
var uiElementInput: GPUImageUIElement!
override func viewDidLoad() {
super.viewDidLoad()
videoCamera = GPUImageVideoCamera(
sessionPreset: AVCaptureSessionPreset640x480,
cameraPosition: AVCaptureDevicePosition.Back)
videoCamera.outputImageOrientation = .Portrait
videoCamera.horizontallyMirrorFrontFacingCamera = false
videoCamera.horizontallyMirrorRearFacingCamera = false
filter = GPUImageBrightnessFilter()
blendFilter = GPUImageAlphaBlendFilter()
blendFilter.mix = 1.0
videoCamera.addTarget(filter)
// here I try to add a label as UIElement
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 640, height: 480))
label.text = "Demo text"
label.textColor = UIColor.redColor()
label.font = UIFont.systemFontOfSize(17.0)
label.backgroundColor = UIColor.clearColor()
label.textAlignment = .Center
uiElementInput = GPUImageUIElement(view: label)
filter.addTarget(blendFilter)
uiElementInput.addTarget(blendFilter)
blendFilter.addTarget(filterView)
filter.frameProcessingCompletionBlock = { filter, time in
self.uiElementInput.update()
}
videoCamera.startCameraCapture()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Результат - удар: