【问题标题】:How to apply filter on uiimage in ios to remove shadow and lights?如何在ios中的uiimage上应用过滤器以去除阴影和灯光?
【发布时间】:2015-06-15 19:06:22
【问题描述】:

我想在 ios 中应用过滤器 uiimage 来去除阴影和灯光。我有下面的android代码。我需要它在 ios 中的等价物。

public static Bitmap changeBitmapContrastBrightness(Bitmap bmp, float contrast, float brightness)
{
ColorMatrix cm = new ColorMatrix(new float[]
        {
            contrast, 0, 0, 0, brightness,
            0, contrast, 0, 0, brightness,
            0, 0, contrast, 0, brightness,
            0, 0, 0, 1, 0
        });

Bitmap ret = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());

Canvas canvas = new Canvas(ret);

Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(bmp, 0, 0, paint);

return ret;
}

我使用了下面的 ios 代码,但无法得到正确的结果

CIImage *inputImage = [CIImage imageWithCGImage:[UIImage   imageNamed:@"facedetectionpic.jpg"].CGImage]; // 1
// Make the filter
CIFilter *colorMatrixFilter = [CIFilter filterWithName:@"CIColorMatrix"]; // 2
[colorMatrixFilter setDefaults]; // 3
[colorMatrixFilter setValue:inputImage forKey:kCIInputImageKey]; // 4
[colorMatrixFilter setValue:[CIVector vectorWithX:1 Y:1 Z:1 W:0] forKey:@"inputRVector"]; // 5
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0] forKey:@"inputGVector"]; // 6
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0] forKey:@"inputBVector"]; // 7
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"]; // 8

// Get the output image recipe
CIImage *outputImage = [colorMatrixFilter outputImage];  // 9

// Create the context and instruct CoreImage to draw the output image recipe into a CGImage
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; // 10

【问题讨论】:

    标签: ios image-processing colormatrix


    【解决方案1】:
        -(void)fiterImage:(CIColor*)imgFirstColor:(CIColor*)imgSecondColor:(CIColor*)imgThirdColor:(CIColor*)imgForthColor
            {
                CIImage *rawImageData1;
    //arrImagesTemp image array
                rawImageData1 =[[CIImage alloc] initWithImage:[arrImagesTemp objectAtIndex:0]];
    
                if (rawImageData1)
                {
                    CIImage* outputImage = nil;
    
                    CIFilter* greenGenerator = [CIFilter filterWithName:@"CIConstantColorGenerator"];
    
                    [greenGenerator setValue:imgFirstColor forKey:@"inputColor"];
                    CIImage* greenImage = [greenGenerator valueForKey:@"outputImage"];
    
                    CIImage *rawImageData =[[CIImage alloc] initWithImage:[arrImagesTemp objectAtIndex:0]];
                    CIFilter* filter = [CIFilter filterWithName:@"CIMultiplyCompositing"];
                    [filter setValue:greenImage forKey:@"inputImage"];
                    [filter setValue:rawImageData forKey:@"inputBackgroundImage"];
                    outputImage = [filter valueForKey:@"outputImage"];
    
                    CIImage *filteredImageData = [filter valueForKey:@"outputImage"];
    
                    CIContext* context = [CIContext contextWithOptions:nil];
                    CGImageRef outputImageRef = [context createCGImage:filteredImageData fromRect:[filteredImageData extent]];
                    UIImage *modifiedPhoto = [UIImage imageWithCGImage:outputImageRef scale:1 orientation:UIImageOrientationUp];
    
                }
            }
    

    【讨论】:

      【解决方案2】:

      这是用于数据过滤的。您在代码中使用此逻辑作为图像过滤去除阴影或亮度

        if ([categoryTitle isEqualToString:@"Category"])
               {
                   isCategory=NO;
               }
               else
               {
      
               categoryData=[[NSMutableArray alloc]init];
               for (int a=0; a<fetchedDataArray.count; a++)
               {
                   categoryDictionary=[[NSMutableDictionary alloc]init];
                   categoryDictionary=[fetchedDataArray objectAtIndex:a];
                   NSString *categ=[[[[[categoryDictionary objectForKey:@"terms"] objectForKey:@"offershop"] objectAtIndex:0] objectForKey:@"parent"] objectForKey:@"name"];
                   if ([categoryTitle isEqualToString:categ])
                   {
                       [categoryData addObject:categoryDictionary];
                   }
                   //searchDictionary=nil;
               }
               NSLog(@"done");
               }
               [self.tableview reloadData];
      
           }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-29
        • 2013-02-25
        • 1970-01-01
        • 1970-01-01
        • 2012-10-31
        • 2023-03-22
        • 2014-03-20
        • 1970-01-01
        相关资源
        最近更新 更多