2015-06-15 59 views
1

我想應用在ios中的過濾器uiimage去除陰影和燈光。我有以下android代碼。我需要它在ios中的等價物。如何在ios上使用uiimage過濾器去除陰影和燈光?

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 

回答

0
-(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]; 

    }