2012-08-01 76 views
1

我有以下MonoTouch代码,它可以改变Saturation,但我也想改变HueMonotouch:改变图像的色调,而不仅仅是饱和度

float hue = 0; 
float saturation = 1; 

if (colorCtrls == null) 
    colorCtrls = new CIColorControls() { 
       Image = CIImage.FromCGImage (originalImage.CGImage) }; 
else 
    colorCtrls.Image = CIImage.FromCGImage(originalImage.CGImage); 

colorCtrls.Saturation = saturation; 

var output = colorCtrls.OutputImage; 
var context = CIContext.FromOptions(null); 
var result = context.CreateCGImage(output, output.Extent); 

return UIImage.FromImage(result); 

回答

1

这是一个不同的过滤器的一部分,所以你需要使用的CIHueAdjust代替CIColorControls控制色调。

1

这里就是我最后做补充色调:

 var hueAdjust = new CIHueAdjust() { 
      Image = CIImage.FromCGImage(originalImage.CGImage), 
      Angle = hue // Default is 0 
     }; 
     var output = hueAdjust.OutputImage; 
     var context = CIContext.FromOptions(null); 
     var cgimage = context.CreateCGImage(output, output.Extent); 
     return UIImage.FromImage(cgimage); 

然而,这并不能在视网膜显示设备的工作,返回的图像是正确缩放。

+1

Miguel在MonoTouch(包括链接过滤器)上使用CoreImage制作了一个很好的视频(在YouTube上)。 http://www.youtube.com/watch?v=Yb2pi3tDb3c – poupou 2012-08-01 17:50:02

+1

该示例在Retina设备上不起作用,返回的图像尺寸不正确。 – 2012-08-05 17:49:39

+0

请澄清:当你说“不适用于Retina设备”时,你是不是指“使用UINavigationController.Appearance.SetBackgroundImage时”(按照SO#11805628)?通常我相信这段代码在将UIImage分配给正确设置了边界的UIImageView时确实有效。 – Conceptdev 2012-08-12 10:48:44

相关问题