我正在研究GPUImage库。我已经设置了该特定的过滤器将应用于Collectionview的didselectitematindexpath
方法。这是我第一个基于GPUImage库的项目。我成功地在GPUImageview上应用过滤器,但是它会花费很多时间来应用过滤器。请指导我,我怎样才能让它快速申请。GPUImage花费时间应用过滤器
这里是我的代码,
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
[filter removeAllTargets];
if (indexPath.row==0) {
NSLog(@"Normal Filter");
}
else if (indexPath.row==1)
{
filter = [[GPUImageSepiaFilter alloc] init];
}
else if (indexPath.row==2)
{
filter = [[GPUImagePixellateFilter alloc] init];
}
else if (indexPath.row==3)
{
filter = [[GPUImagePixellatePositionFilter alloc] init];
}
else if (indexPath.row==4)
{
filter = [[GPUImagePolkaDotFilter alloc] init];
}
else if (indexPath.row==5)
{
filter = [[GPUImageHalftoneFilter alloc] init];
}
else if (indexPath.row==6)
{
filter = [[GPUImageCrosshatchFilter alloc] init];
}
else if (indexPath.row==7)
{
filter = [[GPUImageColorInvertFilter alloc] init];
}
else if (indexPath.row==8)
{
filter = [[GPUImageGrayscaleFilter alloc] init];
}
else if (indexPath.row==9)
{
filter = [[GPUImageMonochromeFilter alloc] init];
[(GPUImageMonochromeFilter *)filter setColor:(GPUVector4){0.0f, 0.0f, 1.0f, 1.f}];
}
else if (indexPath.row==10)
{
filter = [[GPUImageFalseColorFilter alloc] init];
}
else if (indexPath.row==11)
{
filter = [[GPUImageSoftEleganceFilter alloc] init];
}
else if (indexPath.row==12)
{
filter = [[GPUImageMissEtikateFilter alloc] init];
}
else if (indexPath.row==13)
{
filter = [[GPUImageAmatorkaFilter alloc] init];
}
else if (indexPath.row==14)
{
filter = [[GPUImageSaturationFilter alloc] init];
[(GPUImageSaturationFilter *)filter setSaturation:2.0];
}
else if (indexPath.row==15)
{
filter = [[GPUImageContrastFilter alloc] init];
[(GPUImageContrastFilter *)filter setContrast:1.5];
}
else if (indexPath.row==16)
{
filter = [[GPUImageBrightnessFilter alloc] init];
[(GPUImageBrightnessFilter *)filter setBrightness:0.6];
}
else if (indexPath.row==17)
{
filter = [[GPUImageLevelsFilter alloc] init];
}
else if (indexPath.row==18)
{
filter = [[GPUImageRGBFilter alloc] init];
}
else if (indexPath.row==19)
{
filter = [[GPUImageHueFilter alloc] init];
}
else if (indexPath.row==20)
{
filter = [[GPUImageWhiteBalanceFilter alloc] init];
}
else if (indexPath.row==21)
{
filter = [[GPUImageExposureFilter alloc] init];
}
else if (indexPath.row==22)
{
filter = [[GPUImageSharpenFilter alloc] init];
}
else if (indexPath.row==23)
{
filter = [[GPUImageUnsharpMaskFilter alloc] init];
}
else if (indexPath.row==24)
{
filter = [[GPUImageGammaFilter alloc] init];
}
else if (indexPath.row==25)
{
filter = [[GPUImageToneCurveFilter alloc] init];
[(GPUImageToneCurveFilter *)filter setBlueControlPoints:[NSArray arrayWithObjects:[NSValue valueWithCGPoint:CGPointMake(0.0, 0.0)], [NSValue valueWithCGPoint:CGPointMake(0.5, 0.5)], [NSValue valueWithCGPoint:CGPointMake(1.0, 0.75)], nil]];
}
else if (indexPath.row==26)
{
filter = [[GPUImageHighlightShadowFilter alloc] init];
}
else if (indexPath.row==27)
{
filter = [[GPUImageHazeFilter alloc] init];
}
else if (indexPath.row==28)
{
filter = [[GPUImageAverageColor alloc] init];
}
else if (indexPath.row==29)
{
filter = [[GPUImageLuminosity alloc] init];
}
else if (indexPath.row==30)
{
filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramRGB];
}
else if (indexPath.row==31)
{
filter = [[GPUImageLuminanceThresholdFilter alloc] init];
}
else if (indexPath.row==32)
{
filter = [[GPUImageAdaptiveThresholdFilter alloc] init];
}
else if (indexPath.row==33)
{
filter = [[GPUImageAverageLuminanceThresholdFilter alloc] init];
}
else if (indexPath.row==34)
{
filter = [[GPUImageCropFilter alloc] initWithCropRegion:CGRectMake(0.0, 0.0, 1.0, 0.25)];
}
[sourcePicture addTarget:filter];
[filter addTarget:self.vwGPUImagview];
[sourcePicture processImage];
}
输出: -
编辑: - 当我写[filter removeAllTarget]
一些过滤器不工作。如果我删除它,那么它完全工作。我的错误在哪里?
编辑2: - Demo Link
你还没有真的说过*哪里*事情很慢。他们第一次出现在收藏视图时速度慢吗?他们被选中时速度慢吗?这些图像有多大?您的缩略图是以全分辨率进行过滤还是仅缩略图所需的分辨率降低?另外,我注意到,当你从你的过滤器中删除所有目标时,你似乎并没有从你的重复使用的图像中删除所有目标。这意味着每当您更换新的滤镜时,图像都会被放入不断增加的滤镜列表中。 –
@BradLarson谢谢您的重播。实际上,我临时将过滤器应用于集合视图'cellforitematindexpath'。一旦项目完成,我会将其设置为静态图像。主要问题是当我在'didselectrowatindexpath'中调用动作时,图像会很慢。有问题,我编辑了github链接。我如何努力实现它。 –