私はGPUImageライブラリで作業しています。 Collectionviewのdidselectitematindexpath
メソッドにその特定のフィルタを適用するように設定しました。これはGPUImageライブラリに基づいた私の最初のプロジェクトです。私はGPUImageviewでFilterを適用することに成功しましたが、フィルタを適用するのに多くの時間がかかります。私を案内してください、どうすれば応募を迅速にすることができますか?ここで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];
}
出力: -
EDIT: - 私は[filter removeAllTarget]
を書くとき、いくつかのフィルタが働いていませんでした。私がそれを取り除くと、それは完全に働いた。私のミスはどこですか?
EDIT 2: - Demo Link
あなたは本当に*どこが遅いのかは実際には述べていません。コレクションビューに最初に表示されるときに時間がかかりますか?彼らは選択されたときに遅くなりますか?これらの画像の大きさはどれくらいですか?サムネイルはフル解像度でフィルタリングされていますか、縮小された解像度のみがサムネイルに必要ですか?また、フィルタからすべてのターゲットを削除している間は、再利用されたイメージからすべてのターゲットを削除しているようには見えません。つまり、新しい画像に変更するたびに、フィルタのリストに画像が追加されます。 –
@BradLarson再生していただきありがとうございます。実際、私はフィルタを 'cellforitematindexpath'コレクションビューに一時的に適用しました。プロジェクトが完了したら、それを静止画として設定します。主な問題は、 'didselectrowatindexpath'でアクションを呼び出すとイメージが遅くなることです。質問で私はgithubのリンクを編集しました。どのように私はそれを達成しようとした。 –