1. 程式人生 > >使用GPUImage 實現利用GPU來實習濾鏡(實時濾鏡 和iphone手機一樣)

使用GPUImage 實現利用GPU來實習濾鏡(實時濾鏡 和iphone手機一樣)

一:將GPUImage 新增到工程

    兩篇資料

注意:

二:使用

   a: 圖片使用濾鏡

    GPUImageFilter *selectedFilter;

    switch (buttonIndex) {

        case 0:

            selectedFilter = [[GPUImageGrayscaleFilter alloc] init];

            break;

        case 1:

            selectedFilter = [[GPUImageSepiaFilter alloc] init

];

            break;

        case 2:

            selectedFilter = [[GPUImageSketchFilter alloc] init];

            break;

        case 3:

            selectedFilter = [[GPUImagePixellateFilter alloc] init];

            break;

        case 4:

            selectedFilter = [[GPUImageColorInvertFilter alloc

] init];

            break;

        case 5:

            selectedFilter = [[GPUImageToonFilter alloc] init];

            break;

        case 6:

            selectedFilter = [[GPUImagePinchDistortionFilter alloc] init];

            break;

        case 7:

            selectedFilter = [[GPUImageFilter alloc

] init];

            break;

        default:

            break;

    }

    //關鍵程式碼:

    UIImage *filterImage=[selectedFilter imageByFilteringImage:self.selectImage];

    self.showImageView.image=filterImage;


b:實時濾鏡

videoCamera = [[GPUImageVideoCameraalloc] initWithSessionPreset:AVCaptureSessionPreset640x480cameraPosition:AVCaptureDevicePositionBack];

//    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];

//    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:AVCaptureDevicePositionBack];

//    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1920x1080 cameraPosition:AVCaptureDevicePositionBack];

videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

videoCamera.horizontallyMirrorFrontFacingCamera = NO;

videoCamera.horizontallyMirrorRearFacingCamera = NO;

filter = [[GPUImageSketchFilteralloc] init];

    GPUImageView *filterView = [[GPUImageView alloc] initWithFrame:CGRectMake(10, 100, 100, 100)];

    filterView.fillMode=kGPUImageFillModePreserveAspectRatioAndFill;

    [self.view addSubview:filterView];

    [filter addTarget:filterView];

    [videoCamera addTarget:filter];

GPUImageColorInvertFilter *filter1= [[GPUImageColorInvertFilteralloc] init];

    GPUImageView *filterView1 = [[GPUImageView alloc] initWithFrame:CGRectMake(110, 100, 100, 100)];

    filterView1.fillMode=kGPUImageFillModePreserveAspectRatioAndFill;

    [self.view addSubview:filterView1];

    [filter1 addTarget:filterView1];

    [videoCamera addTarget:filter1];

GPUImageGrayscaleFilter *filter2= [[GPUImageGrayscaleFilteralloc] init];

    GPUImageView *filterView2 = [[GPUImageView alloc] initWithFrame:CGRectMake(210, 100, 100, 100)];

    filterView2.fillMode=kGPUImageFillModePreserveAspectRatioAndFill;

    [self.view addSubview:filterView2];

    [filter2 addTarget:filterView2];

    [videoCamera addTarget:filter2];

    [videoCamerastartCameraCapture];