Lui*_*oza 1 iphone objective-c ios gpuimage
在https://github.com/luisespinoza/LEColorPicker项目上工作,我试图使用项目GPUImage(https://github.com/BradLarson/GPUImage)从任意输入UIImage生成直方图UIImage.
我正在使用的当前代码如下:
- (NSDictionary*)dictionaryWithColorsPickedFromImage:(UIImage *)image
{
GPUImageFilter *filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramRGB];
UIImage *filteredImage = [filter imageByFilteringImage:image];
[UIImagePNGRepresentation(filteredImage) writeToFile:@"/Users/Luis/histogram.png" atomically:YES];
return nil;
}
Run Code Online (Sandbox Code Playgroud)
问题是histogram.png只为每个输入图像产生一条黑线.
那么,如何使用iOS GPUImage生成直方图UIImage的正确代码呢?
您可以查看FilterShowcase示例,了解它在实践中应该如何工作.
GPUImageHistogramFilter接收图像并输出256x3图像,该图像对直方图进行编码(它的高度为3像素,因为帧缓冲构造中不允许1像素高度).R,G和B值存储在它们各自的颜色通道中,位于该图像中心的中心1像素高的条带内.
要想象这一点,您需要使用GPUImageHistogramGenerator,并将GPUImageHistogramFilter的输出提供给它.GPUImageHistogramGenerator将直方图输入的可视化表示创建为图像.您需要使用-forceProcessingAtSize:设置GPUImageHistogramGenerator的输出图像的大小,因为默认情况下它没有设置大小.
另一个警告是,您需要在输入图像和GPUImageHistogramFilter之间使用某种虚拟过滤器.GPUImageHistogramFilter目前依赖于glReadPixels()并且仅适用于渲染内容,而不适用于直接上传的图像或视频帧.
FilterShowcase中使用的代码如下:
filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramRGB];
GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init];
[videoCamera addTarget:gammaFilter];
[gammaFilter addTarget:filter];
GPUImageHistogramGenerator *histogramGraph = [[GPUImageHistogramGenerator alloc] init];
[histogramGraph forceProcessingAtSize:CGSizeMake(256.0, 330.0)];
[filter addTarget:histogramGraph];
GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 0.75;
[blendFilter forceProcessingAtSize:CGSizeMake(256.0, 330.0)];
[videoCamera addTarget:blendFilter];
[histogramGraph addTarget:blendFilter];
[blendFilter addTarget:filterView];
Run Code Online (Sandbox Code Playgroud)
这将生成的直方图可视化叠加在传入的摄像机视频之上.
| 归档时间: |
|
| 查看次数: |
3120 次 |
| 最近记录: |