2016-02-23 130 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

感謝您的回覆!我終於也發現我需要爲預設尺寸設置標籤的大小。之後,我嘗試了我在故事板中創建的子視圖。所以我不得不添加一個大小與我的UIScreen.mainScreen()。bounds.size相同的空視圖,然後將設計的視圖添加到此佔位符視圖。經過這些操作後,我終於得到了子視圖的正確尺寸。 –

+0

@AndreyGershengoren太棒了! – BurtK