ios - GPUImage 在另一个 View 中显示直方图

标签 ios objective-c histogram gpuimage gpuimagestillcamera

我目前正在尝试使用 GPUImage 显示直方图。我目前有以下代码:

GPUImageOutput<GPUImageInput> *filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramLuminance];
[self.stillCamera  removeTarget:filter];
GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init];
[self.stillCamera  addTarget:gammaFilter];
[gammaFilter addTarget:filter];

GPUImageHistogramGenerator *histogramGraph = [[GPUImageHistogramGenerator alloc] init];

[histogramGraph forceProcessingAtSize:CGSizeMake(500.0, 500)];
[filter addTarget:histogramGraph];

GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 0.75;
[blendFilter forceProcessingAtSize:CGSizeMake(500, 500)];

[self.stillCamera addTarget:blendFilter];
[histogramGraph addTarget:blendFilter];

[blendFilter addTarget:previewView];

上面显示了在我的预览 View 上过度显示的直方图。 (但是它确实会闪烁,另一个问题,改天)

我想在 View 上特定位置的较小 View 上显示此直方图。我怎样才能做到这一点?

最佳答案

要在单独的 View 中显示直方图,您需要在主视图中添加另一个 GPUImageView 并将直方图过滤器指向它。以下是基于 SimpleImageFilter 示例的源代码。

- (void)loadView
{    
    CGRect mainScreenFrame = [[UIScreen mainScreen] applicationFrame];

    GPUImageView *primaryView = [[GPUImageView alloc] initWithFrame:mainScreenFrame];
    self.view = primaryView;

    UIImage *inputImage = [UIImage imageNamed:@"WID-small.jpg"];
    GPUImagePicture *sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];

    // Creating another view to show histogram
    GPUImageView *histView = [[GPUImageView alloc] initWithFrame:CGRectMake(mainScreenFrame.size.width - 100, mainScreenFrame.size.height - 100, 100, 100)];
    [primaryView addSubview:histView];

    // Create histogram filter and generator and point it to histogram view
    GPUImageOutput<GPUImageInput> *histFilter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramLuminance];
    GPUImageOutput<GPUImageInput> *histGenerator = [[GPUImageHistogramGenerator alloc] init];
    [histGenerator forceProcessingAtSize:histView.sizeInPixels];
    [sourcePicture addTarget:histFilter];
    [histFilter addTarget:histGenerator];
    // Note target - hist view
    [histGenerator addTarget:histView];

    // Setup sepia filter just to show main picture
    GPUImageOutput<GPUImageInput> *sepiaFilter = [[GPUImageSepiaFilter alloc] init];
    [sepiaFilter forceProcessingAtSize:primaryView.sizeInPixels];
    [sourcePicture addTarget:sepiaFilter];
    // Note target - main view
    [sepiaFilter addTarget:primaryView];

    [sourcePicture processImage];
}

最终结果:
enter image description here

关于ios - GPUImage 在另一个 View 中显示直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29870565/

相关文章:

objective-c - 为我的 iPhone 应用程序使用 xcode 4.2 编译链接错误

ios - 创建一个不断扩大的圈子 iOS

ios - 在 UITableView 中显示 NSMutableArray

python - 去掉条形图比例中的微小分数(Pandas/Python)

pandas - 如何在同一个 jupyter notebook cell 中显示多个 pandas 系列直方图?

ios - Expo AV 音频无法在 iOS/iPhone 上播放

ios - 在 Watch InterfaceController.swift 中获取 MMWormhole 的未解析标识符

ios - 应用商店提交支持 URL

ios - 将UIButton标题设置为选定的表格单元格

r - 如何在R中一起绘制多个堆叠的直方图?