Guest User

Untitled

a guest
Nov 17th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. public class ColorReplaceFilter : CIFilter
  2. {
  3. const string filterName = "colorReplace";
  4. const int numArgs = 4;
  5. const string coreIageShaderProgram =
  6. @"
  7. kernel vec4 main(__sample s, __color o, __color r, float threshold) {
  8. vec4 diff = s.rgba - o;
  9. float distance = length( diff );
  10. float alpha = compare( distance - threshold, 0.0, 1.0 );
  11. if (alpha == 0.0)
  12. return r;
  13. return s;
  14. }
  15. ";
  16.  
  17. NSObject[] arguments;
  18. CIColorKernel colorKernel;
  19.  
  20. public ColorReplaceFilter() { Initializer(); }
  21. public ColorReplaceFilter(NSCoder coder) : base(coder) { Initializer(); }
  22. public ColorReplaceFilter(NSObjectFlag t) : base(t) { Initializer(); }
  23. public ColorReplaceFilter(IntPtr handle) : base(handle) { Initializer(); }
  24.  
  25. public CIImage InputImage { get; set; }
  26. public CIColor MatchColor { get; set; }
  27. public CIColor ReplaceWithColor { get; set; }
  28.  
  29. NSNumber _threshold;
  30. public nfloat Threshold
  31. {
  32. get { return _threshold.NFloatValue; }
  33. set { _threshold = NSNumber.FromNFloat(value); }
  34. }
  35.  
  36. void Initializer()
  37. {
  38. arguments = new NSObject[numArgs];
  39. colorKernel = CIColorKernel.FromProgramSingle(coreIageShaderProgram);
  40. MatchColor = CIColor.BlackColor;
  41. ReplaceWithColor = CIColor.WhiteColor;
  42. _threshold = new NSNumber(0.0f);
  43. }
  44.  
  45. public override string Name
  46. {
  47. get => filterName;
  48. }
  49.  
  50. public override CIImage OutputImage
  51. {
  52. get => CreateOutputImage();
  53. }
  54.  
  55. CIImage CreateOutputImage()
  56. {
  57. if (InputImage != null) // Avoid object creation to allow fast filter chaining
  58. {
  59. arguments[0] = InputImage as NSObject;
  60. arguments[1] = MatchColor as NSObject;
  61. arguments[2] = ReplaceWithColor as NSObject;
  62. arguments[3] = _threshold as NSObject;
  63. var ciImage = colorKernel.ApplyWithExtent(InputImage.Extent, arguments);
  64. return ciImage;
  65. }
  66. return null;
  67. }
  68.  
  69. protected override void Dispose(bool disposing)
  70. {
  71. base.Dispose(disposing);
  72. arguments = null;
  73. InputImage = null;
  74. MatchColor = null;
  75. ReplaceWithColor = null;
  76. colorKernel.Dispose();
  77. }
  78. }
Add Comment
Please, Sign In to add comment