2016-02-23 2 views
2

Я пытаюсь записать видео с некоторым наложением текста с использованием библиотеки GPUImage. Запись с наложением работает до сих пор, но я не могу добиться, чтобы наложение имело нужный размер. Независимо от того, какой кадр я использую при инициализации, наложение сверху всегда занимает весь размер слоя предварительного просмотра (GPUImageView). Я попытался добавить наложение как в раскадровку, так и программно. Вот мой код:Размер наложения GPUImageUIElement

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() 

В результате появляется так: Screenshot

Как я могу получить UIElement иметь меньший размер, как на этикетке как часть зрения? Идея состоит в том, чтобы добавить предопределенный вид наложения (а не только метку), но он также имеет неправильные размеры.

Спасибо!

ответ

4

Здравствуйте Андрей Gershengoren,

Вы должны установить размер этикетки зрения как же с размером захвата камеры сессии предустановленного.

Если вы выберете 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() 
    } 


} 

Результат раздувом:

enter image description here

+0

Или вы можете использовать GPUImageTransformFilter! – BurtK

+1

Благодарим вас за ваш повтор! Я, наконец, также понял, что мне нужно установить одинаковый размер для метки в качестве предустановленных размеров. После этого я попытался с subview, который я создал в раскадровке. Поэтому мне пришлось добавить пустой вид с размером, равным моему UIScreen.mainScreen(). Bounds.size, а затем добавить созданный вид к этому представлению-заполнителю. После этих манипуляций я наконец получил правильные размеры для подсмотра. –

+0

@AndreyGershengoren Отлично! – BurtK

Смежные вопросы