BradLarson / GPUImage

An open source iOS framework for GPU-based image and video processing
http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework
BSD 3-Clause "New" or "Revised" License
20.25k stars 4.61k forks source link

Brad, I have written pencil sketch filter but need to optimize and write in GLSL. #2439

Open mobihunterz opened 7 years ago

mobihunterz commented 7 years ago

I have written pencil sketch filter but need to write the filter in GLSL to optimize the filter. Could you give me suggestion for this?

Pnecil sketch code:

- (void)pencilSketch
{
    //UIImage *inputImage = [UIImage imageNamed:@"portrait.jpg"];
    UIImage *inputImage = [UIImage imageNamed:@"selfie4.jpg"];

    GPUImageGrayscaleFilter *grayFilter = [[GPUImageGrayscaleFilter alloc] init];
    GPUImageColorInvertFilter *edgeFilter = [[GPUImageColorInvertFilter alloc] init];
    GPUImageGaussianBlurFilter *blurr = [[GPUImageGaussianBlurFilter alloc] init];
    blurr.blurRadiusInPixels = 8.0;            // Edge Sensitivity
    blurr.texelSpacingMultiplier = 8.0;        // Edge Strength

    GPUImageLinearBurnBlendFilter *filter = [[GPUImageLinearBurnBlendFilter alloc] init];

     UIImage *invImg = [edgeFilter imageByFilteringImage: inputImage];      // Color Invert
     UIImage *blurrImg = [blurr imageByFilteringImage: inputImage];         // Gaussian Blurr

    // Linear Burn Blend
     GPUImagePicture *mainPicture = [[GPUImagePicture alloc] initWithImage: invImg];
     GPUImagePicture *topPicture = [[GPUImagePicture alloc] initWithImage: blurrImg];

     [mainPicture addTarget: filter];
     [topPicture addTarget: filter];

     [filter useNextFrameForImageCapture];
     [mainPicture processImage];
     [topPicture processImage];

     UIImage *resultedimage = [filter imageFromCurrentFramebuffer];
     resultedimage = [UIImage imageWithCGImage:[resultedimage CGImage] scale:1.0 orientation: invImg.imageOrientation];

    GPUImageColorInvertFilter *bf = [[GPUImageColorInvertFilter alloc] init];
    resultedimage = [bf imageByFilteringImage: resultedimage];      // Color Invert
    resultedimage = [grayFilter imageByFilteringImage: resultedimage];  // Gray scale

    UIImage *grainImage = [UIImage imageNamed:@"stroke2.jpg"];
    GPUImageGaussianBlurFilter *gBlurr = [[GPUImageGaussianBlurFilter alloc] init];
    gBlurr.blurRadiusInPixels = 5.0;
    UIImage *blurrGrainImg = [gBlurr imageByFilteringImage: grainImage];
    GPUImagePicture *blurrPic = [[GPUImagePicture alloc] initWithImage: resultedimage];
    GPUImagePicture *topPic = [[GPUImagePicture alloc] initWithImage: blurrGrainImg];

    GPUImageSoftLightBlendFilter *maskedFilter = [[GPUImageSoftLightBlendFilter alloc] init];
    [blurrPic addTarget: maskedFilter];
    [topPic addTarget: maskedFilter];
    [maskedFilter useNextFrameForImageCapture];
    [blurrPic processImage];
    [topPic processImage];

    resultedimage = [maskedFilter imageFromCurrentFramebuffer];
    resultedimage = [UIImage imageWithCGImage:[resultedimage CGImage] scale:1.0 orientation: inputImage.imageOrientation];

    GPUImageColorBurnFilter *bFilter = [[GPUImageColorBurnFilter alloc] init];
    bFilter.brightness = 5.0;           // Edge Darkness
    resultedimage = [bFilter imageByFilteringImage: resultedimage];

     baseImage.image = resultedimage;
}

Please help me optimising the code.