我正在尝试创建一个应用程序,我可以在录制的视频中添加过滤器.基本上,我想复制Instagram视频或Viddy中存在的功能.
我做过研究,我不能把它拼凑起来.我已经研究过使用GLSurfaceView播放录制的视频,我知道我可以使用NDK进行像素处理并将其发送回SurfaceView或以某种方式保存.问题是,我不知道如何发送像素数据,因为似乎没有访问它的功能.这个想法来自Camera函数"onPreviewFrame".该函数返回一个字节数组,允许我操纵像素并显示它.
另一个想法是使用GLSurfaceView并使用OpenGL来渲染过滤器.GLSurfaceView有一个你可以设置的渲染器,但我对OpenGL不是很熟悉.但同样,这又回到了实际获取每个视频帧的像素.我还读到了将每个帧作为纹理进行翻录,然后在OpenGL中操作纹理,但我遇到的答案并不十分详细.
最后,我研究了JavaCV.试图使用FFmpegFrameGrabber,但我也没有多少.我想只抓一帧,但是当我尝试将帧的ByteBuffer写入ImageView时,我得到一个"不足以容纳像素的缓冲区"错误.
任何指导都会很棒.
我正在使用NSPopover,我将NSViewController放在内部,以显示为来自NSStatusItem的自定义视图.除了具有角半径的NSButton之外,大多数视图控制器都能正确显示.在应用圆角的地方有一些额外的白色泄漏.显示实际应用程序中的按钮,不会发生此问题.
我觉得必须对我设置为"NSAppearanceNameAqua"的NSPopover外观做些什么.
NSButton位于NSView中,显示在NSTableView中并设置为此样式.
self.createdButton.wantsLayer = true
self.createdButton.layer?.backgroundColor = Utils.blackColor().CGColor
self.createdButton.layer?.masksToBounds = true
self.createdButton.layer?.cornerRadius = 5
Run Code Online (Sandbox Code Playgroud)
顶部图片是实际应用程序打开时的图像.底部图像是在NSPopover中显示视图控制器的时候.