Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Should be the version just prior to showing it for our senior project.

  • Loading branch information...
commit 4c22c8e000a6709bfc3703e2ef118a9a2a7a8cb5 1 parent 2d88f21
@jamiis jamiis authored
Showing with 4,355 additions and 731 deletions.
  1. BIN  Icon-72.png
  2. BIN  Icon-Small.png
  3. BIN  Icon.png
  4. BIN  Icon@2x.png
  5. +1 −0  ImProc
  6. +451 −86 ImgProc.xcodeproj/project.pbxproj
  7. BIN  ImgProc.xcodeproj/project.xcworkspace/xcuserdata/Jamis.xcuserdatad/UserInterfaceState.xcuserstate
  8. +28 −0 ImgProc.xcodeproj/xcuserdata/Jamis.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
  9. +6 −1 ImgProc.xcodeproj/xcuserdata/Jamis.xcuserdatad/xcschemes/ImgProc.xcscheme
  10. +105 −30 ImgProc/Constants.h
  11. +51 −0 ImgProc/Constants.m
  12. +119 −0 ImgProc/GraphicsCommon.h
  13. +38 −0 ImgProc/ImProc_Color.h
  14. +31 −0 ImgProc/ImProc_Effects.h
  15. +56 −0 ImgProc/ImageConverter.h
  16. +222 −0 ImgProc/ImageConverter.m
  17. +5 −3 ImgProc/ImgProc-Info.plist
  18. +26 −11 ImgProc/OFAlgorithmAttributes.m
  19. +13 −0 ImgProc/OFAlgorithmControlsView.h
  20. +93 −6 ImgProc/OFAlgorithmControlsView.m
  21. +4 −0 ImgProc/OFAlgorithmHandler.h
  22. +368 −38 ImgProc/OFAlgorithmHandler.m
  23. +0 −3  ImgProc/OFAlgorithmScrollViewController.h
  24. +161 −116 ImgProc/OFAlgorithmScrollViewController.m
  25. +1 −11 ImgProc/OFAppDelegate.m
  26. +0 −1  ImgProc/OFHelperFunctions.m
  27. +20 −0 ImgProc/OFImageProcHelperFunctions.h
  28. +131 −0 ImgProc/OFImageProcHelperFunctions.m
  29. +25 −0 ImgProc/OFInstructionImageView.h
  30. +60 −0 ImgProc/OFInstructionImagesView.m
  31. +0 −31 ImgProc/OFLiveVideo.h
  32. +0 −132 ImgProc/OFLiveVideo.m
  33. +97 −0 ImgProc/OFLiveVideoHandler.h
  34. +888 −0 ImgProc/OFLiveVideoHandler.m
  35. +18 −10 ImgProc/OFMainViewController.h
  36. +724 −205 ImgProc/OFMainViewController.m
  37. +1 −5 ImgProc/OFPhotoView.h
  38. +43 −26 ImgProc/OFPhotoView.m
  39. +494 −0 Lib.c
  40. BIN  New UI/AlgorithmView.png
  41. BIN  New UI/AlgorithmView.psd
  42. BIN  New UI/MainPage.psd
  43. BIN  New UI/MainPage_CameraButtonPressed.png
  44. BIN  New UI/MainPage_CameraButtonPressed.psd
  45. BIN  New UI/MainView.png
  46. BIN  New UI/WhenQuestionMarkIsPressed.png
  47. BIN  New UI/WhenQuestionMarkIsPressed.psd
  48. BIN  PSDs/Icon2.psd
  49. BIN  PSDs/algo-demo-1.psd
  50. BIN  PSDs/blur-button.psd
  51. BIN  PSDs/brightness-button.psd
  52. BIN  PSDs/button-demo-photos.psd
  53. BIN  PSDs/button-demo.psd
  54. BIN  PSDs/cartoon-button.psd
  55. BIN  PSDs/contrast-button.psd
  56. BIN  PSDs/dilate-button.psd
  57. BIN  PSDs/edges-button.psd
  58. BIN  PSDs/erode-button.psd
  59. BIN  PSDs/gamma-button.psd
  60. BIN  PSDs/gradient-magnitude-button.psd
  61. BIN  PSDs/grayscale-button.psd
  62. BIN  PSDs/icon.psd
  63. BIN  PSDs/instruction_overlay_ipad.psd
  64. BIN  PSDs/invert-button.psd
  65. BIN  PSDs/ipad-button-blur.psd
  66. BIN  PSDs/ipad-button-brightness.psd
  67. BIN  PSDs/ipad-button-cartoon.psd
  68. BIN  PSDs/ipad-button-change-photo-2.psd
  69. BIN  PSDs/ipad-button-change-photo.psd
  70. BIN  PSDs/ipad-button-contrast.psd
  71. BIN  PSDs/ipad-button-demo.psd
  72. BIN  PSDs/ipad-button-dilate.psd
  73. BIN  PSDs/ipad-button-erode.psd
  74. BIN  PSDs/ipad-button-fast-edges.psd
  75. BIN  PSDs/ipad-button-gamma.psd
  76. BIN  PSDs/ipad-button-gradient-magnitude.psd
  77. BIN  PSDs/ipad-button-invert.psd
  78. BIN  PSDs/ipad-button-noise-reduction.psd
  79. BIN  PSDs/ipad-button-posterize.psd
  80. BIN  PSDs/ipad-button-sharp.psd
  81. BIN  PSDs/ipad-button-sketch.psd
  82. BIN  PSDs/ipad-button-sobel-edges.psd
  83. BIN  PSDs/ipad-button-static.psd
  84. BIN  PSDs/ipad-button-threshold.psd
  85. BIN  PSDs/noise-reduction-button.psd
  86. BIN  PSDs/posterize-button.psd
  87. BIN  PSDs/sharpen-button.psd
  88. BIN  PSDs/sketch-button.psd
  89. BIN  PSDs/sobel-button.psd
  90. BIN  PSDs/sobel-edges-button.psd
  91. BIN  PSDs/static-button.psd
  92. BIN  PSDs/threshold-button.psd
  93. +75 −16 ToDo.txt
  94. BIN  button-demo-photos.png
  95. BIN  button-demo-photos@2x.png
  96. BIN  cartoon-button.png
  97. BIN  cartoon-button@2x.png
  98. BIN  dilate-button.png
  99. BIN  dilate-button@2x.png
  100. BIN  dog-frisbee.png
  101. BIN  dog-frisbee@2x.png
  102. BIN  erode-button.png
  103. BIN  erode-button@2x.png
  104. BIN  fruit.png
  105. BIN  fruit@2x.png
  106. BIN  instruction_overlay_ipad.png
  107. BIN  instruction_overlay_ipad@2x.png
  108. BIN  instruction_overlay_iphone.png
  109. BIN  instruction_overlay_iphone.psd
  110. BIN  instruction_overlay_iphone@2x.png
  111. BIN  ipad-button-blur.png
  112. BIN  ipad-button-blur@2x.png
  113. BIN  ipad-button-brightness.png
  114. BIN  ipad-button-brightness@2x.png
  115. BIN  ipad-button-cartoon.png
  116. BIN  ipad-button-cartoon@2x.png
  117. BIN  ipad-button-change-photo-2.png
  118. BIN  ipad-button-change-photo-2@2x.png
  119. BIN  ipad-button-change-photo.png
  120. BIN  ipad-button-change-photo@2x.png
  121. BIN  ipad-button-contrast.png
  122. BIN  ipad-button-contrast@2x.png
  123. BIN  ipad-button-demo.png
  124. BIN  ipad-button-demo@2x.png
  125. BIN  ipad-button-dilate.png
  126. BIN  ipad-button-dilate@2x.png
  127. BIN  ipad-button-erode.png
  128. BIN  ipad-button-erode@2x.png
  129. BIN  ipad-button-fast-edges.png
  130. BIN  ipad-button-fast-edges@2x.png
  131. BIN  ipad-button-gamma.png
  132. BIN  ipad-button-gamma@2x.png
  133. BIN  ipad-button-gradient-magnitude.png
  134. BIN  ipad-button-gradient-magnitude@2x.png
  135. BIN  ipad-button-invert.png
  136. BIN  ipad-button-invert@2x.png
  137. BIN  ipad-button-noise-reduction.png
  138. BIN  ipad-button-noise-reduction@2x.png
  139. BIN  ipad-button-posterize.png
  140. BIN  ipad-button-posterize@2x.png
  141. BIN  ipad-button-sharp.png
  142. BIN  ipad-button-sharp@2x.png
  143. BIN  ipad-button-sketch.png
  144. BIN  ipad-button-sketch@2x.png
  145. BIN  ipad-button-sobel-edges.png
  146. BIN  ipad-button-sobel-edges@2x.png
  147. BIN  ipad-button-static.png
  148. BIN  ipad-button-static@2x.png
  149. BIN  ipad-button-threshold.png
  150. BIN  ipad-button-threshold@2x.png
  151. BIN  jupiter.png
  152. BIN  jupiter@2x.png
  153. BIN  noise-reduction-button.png
  154. BIN  noise-reduction-button@2x.png
  155. BIN  posterize-button.png
  156. BIN  posterize-button@2x.png
  157. BIN  rally-2.png
  158. BIN  rally-2@2x.png
  159. BIN  rally.png
  160. BIN  rally@2x.png
  161. BIN  sketch-button.png
  162. BIN  sketch-button@2x.png
  163. BIN  sobel-button.png
  164. BIN  sobel-button@2x.png
  165. BIN  static-button.png
  166. BIN  static-button@2x.png
  167. BIN  toms.png
  168. BIN  toms@2x.png
  169. BIN  typography.png
  170. BIN  typography@2x.png
View
BIN  Icon-72.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Icon-Small.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  Icon@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1  ImProc
@@ -0,0 +1 @@
+Subproject commit ad6952fc57c33c25b596b2bd55a5fc41ce973000
View
537 ImgProc.xcodeproj/project.pbxproj
@@ -7,12 +7,16 @@
objects = {
/* Begin PBXBuildFile section */
- 1C077028152A6BA4003099B3 /* ImProc_Base.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C07701C152A6BA4003099B3 /* ImProc_Base.c */; };
- 1C077029152A6BA4003099B3 /* ImProc_Convolve.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C07701D152A6BA4003099B3 /* ImProc_Convolve.c */; };
- 1C07702A152A6BA4003099B3 /* ImProc_Edges.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C07701E152A6BA4003099B3 /* ImProc_Edges.c */; };
- 1C07702B152A6BA4003099B3 /* ImProc_Filters.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C07701F152A6BA4003099B3 /* ImProc_Filters.c */; };
- 1C07702C152A6BA4003099B3 /* ImProc_Histogram.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C077020152A6BA4003099B3 /* ImProc_Histogram.c */; };
- 1C07702D152A6BA4003099B3 /* ImProc_Utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C077021152A6BA4003099B3 /* ImProc_Utils.c */; };
+ 1C144B81154085D500A64BE2 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B7D154085D500A64BE2 /* Icon-72.png */; };
+ 1C144B82154085D500A64BE2 /* Icon-Small.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B7E154085D500A64BE2 /* Icon-Small.png */; };
+ 1C144B83154085D500A64BE2 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B7F154085D500A64BE2 /* Icon.png */; };
+ 1C144B84154085D500A64BE2 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B80154085D500A64BE2 /* Icon@2x.png */; };
+ 1C144B871540C8F100A64BE2 /* ipad-button-change-photo-2.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B851540C8F100A64BE2 /* ipad-button-change-photo-2.png */; };
+ 1C144B881540C8F100A64BE2 /* ipad-button-change-photo-2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B861540C8F100A64BE2 /* ipad-button-change-photo-2@2x.png */; };
+ 1C144B8B1540CCA100A64BE2 /* ipad-button-static.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B891540CCA100A64BE2 /* ipad-button-static.png */; };
+ 1C144B8C1540CCA100A64BE2 /* ipad-button-static@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B8A1540CCA100A64BE2 /* ipad-button-static@2x.png */; };
+ 1C144B8F1540CCB100A64BE2 /* static-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B8D1540CCB100A64BE2 /* static-button.png */; };
+ 1C144B901540CCB100A64BE2 /* static-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C144B8E1540CCB100A64BE2 /* static-button@2x.png */; };
1C18534A14FCB64100F86CFB /* grayscale-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C18534814FCB64100F86CFB /* grayscale-button.png */; };
1C352FEC152BFC0800A95B29 /* edges-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C352FEA152BFC0800A95B29 /* edges-button.png */; };
1C352FED152BFC0800A95B29 /* gradient-magnitude-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C352FEB152BFC0800A95B29 /* gradient-magnitude-button.png */; };
@@ -29,6 +33,27 @@
1C3D98B11534805200A7CA8A /* invert-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C3D98A91534805200A7CA8A /* invert-button@2x.png */; };
1C3D98B4153480C300A7CA8A /* sharpen-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C3D98B2153480C300A7CA8A /* sharpen-button@2x.png */; };
1C3D98B5153480C300A7CA8A /* threshold-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C3D98B3153480C300A7CA8A /* threshold-button@2x.png */; };
+ 1C6BE22D153E20520064D7F5 /* .directory in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE21A153E20520064D7F5 /* .directory */; };
+ 1C6BE22F153E20520064D7F5 /* ImProc_Base.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C6BE21C153E20520064D7F5 /* ImProc_Base.c */; };
+ 1C6BE230153E20520064D7F5 /* ImProc_Color.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C6BE21E153E20520064D7F5 /* ImProc_Color.c */; };
+ 1C6BE231153E20520064D7F5 /* ImProc_Convolve.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C6BE220153E20520064D7F5 /* ImProc_Convolve.c */; };
+ 1C6BE232153E20520064D7F5 /* ImProc_Edges.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C6BE222153E20520064D7F5 /* ImProc_Edges.c */; };
+ 1C6BE233153E20520064D7F5 /* ImProc_Effects.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C6BE224153E20520064D7F5 /* ImProc_Effects.c */; };
+ 1C6BE234153E20520064D7F5 /* ImProc_Filters.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C6BE226153E20520064D7F5 /* ImProc_Filters.c */; };
+ 1C6BE235153E20520064D7F5 /* ImProc_Histogram.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C6BE228153E20520064D7F5 /* ImProc_Histogram.c */; };
+ 1C6BE236153E20520064D7F5 /* ImProc_Utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C6BE22A153E20520064D7F5 /* ImProc_Utils.c */; };
+ 1C6BE244153E4BD60064D7F5 /* noise-reduction-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE238153E4BD60064D7F5 /* noise-reduction-button.png */; };
+ 1C6BE245153E4BD60064D7F5 /* noise-reduction-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE239153E4BD60064D7F5 /* noise-reduction-button@2x.png */; };
+ 1C6BE246153E4BD60064D7F5 /* dilate-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE23A153E4BD60064D7F5 /* dilate-button.png */; };
+ 1C6BE247153E4BD60064D7F5 /* dilate-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE23B153E4BD60064D7F5 /* dilate-button@2x.png */; };
+ 1C6BE248153E4BD60064D7F5 /* erode-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE23C153E4BD60064D7F5 /* erode-button.png */; };
+ 1C6BE249153E4BD60064D7F5 /* erode-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE23D153E4BD60064D7F5 /* erode-button@2x.png */; };
+ 1C6BE24C153E4BD60064D7F5 /* posterize-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE240153E4BD60064D7F5 /* posterize-button.png */; };
+ 1C6BE24D153E4BD60064D7F5 /* posterize-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE241153E4BD60064D7F5 /* posterize-button@2x.png */; };
+ 1C6BE24E153E4BD60064D7F5 /* cartoon-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE242153E4BD60064D7F5 /* cartoon-button.png */; };
+ 1C6BE24F153E4BD60064D7F5 /* cartoon-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE243153E4BD60064D7F5 /* cartoon-button@2x.png */; };
+ 1C6BE252153E4D0E0064D7F5 /* sobel-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE250153E4D0E0064D7F5 /* sobel-button.png */; };
+ 1C6BE253153E4D0E0064D7F5 /* sobel-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6BE251153E4D0E0064D7F5 /* sobel-button@2x.png */; };
1C71E0671517EBA000211D8A /* ToDo.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1C71E0661517EB9F00211D8A /* ToDo.txt */; };
1C71E06B1517FE1F00211D8A /* contrast-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C71E06A1517FE1F00211D8A /* contrast-button.png */; };
1C71E06D1517FEEE00211D8A /* brightness-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C71E06C1517FEEE00211D8A /* brightness-button.png */; };
@@ -41,12 +66,16 @@
1C71E08715184B6A00211D8A /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C71E08615184B6A00211D8A /* MediaPlayer.framework */; };
1C71E08915184B7800211D8A /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C71E08815184B7700211D8A /* CoreMedia.framework */; };
1C71E08B15184B7E00211D8A /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C71E08A15184B7D00211D8A /* CoreVideo.framework */; };
- 1C71E08E15190F6900211D8A /* OFLiveVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C71E08D15190F6900211D8A /* OFLiveVideo.m */; };
+ 1C71E08E15190F6900211D8A /* OFLiveVideoHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C71E08D15190F6900211D8A /* OFLiveVideoHandler.m */; };
+ 1C73632A1548B14100DA1E46 /* OFInstructionImagesView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C7363291548B14100DA1E46 /* OFInstructionImagesView.m */; };
+ 1C73632F1548C14500DA1E46 /* instruction_overlay_ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C73632D1548C14500DA1E46 /* instruction_overlay_ipad.png */; };
+ 1C7363301548C14500DA1E46 /* instruction_overlay_ipad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C73632E1548C14500DA1E46 /* instruction_overlay_ipad@2x.png */; };
+ 1C7363331549437F00DA1E46 /* instruction_overlay_iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C7363311549437F00DA1E46 /* instruction_overlay_iphone.png */; };
+ 1C7363341549437F00DA1E46 /* instruction_overlay_iphone@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C7363321549437F00DA1E46 /* instruction_overlay_iphone@2x.png */; };
1C73F1FE14F6015900DD1DA4 /* OFPhotoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C73F1FD14F6015900DD1DA4 /* OFPhotoView.m */; };
1C73F20B14F7393600DD1DA4 /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C73F20A14F7393600DD1DA4 /* Constants.m */; };
1C73F20E14F835D500DD1DA4 /* OFHelperFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C73F20D14F835D500DD1DA4 /* OFHelperFunctions.m */; };
- 1C8C1C8814FC9A45005B9286 /* OFImageProcHelperFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C8C1C8714FC9A45005B9286 /* OFImageProcHelperFunctions.m */; };
- 1C9614AF1502C1B100AFFF9A /* ImageConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C9614AD1502C1B100AFFF9A /* ImageConverter.m */; };
+ 1C8AC4F8154750DF006857B7 /* ImageConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C8AC4F7154750DF006857B7 /* ImageConverter.m */; };
1C9614BB1502D8CD00AFFF9A /* invert-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C9614B91502D8CD00AFFF9A /* invert-button.png */; };
1C99998B14D8CA9C00451D60 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C99998A14D8CA9C00451D60 /* UIKit.framework */; };
1C99998D14D8CA9C00451D60 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C99998C14D8CA9C00451D60 /* Foundation.framework */; };
@@ -55,6 +84,60 @@
1C99999714D8CA9C00451D60 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C99999614D8CA9C00451D60 /* main.m */; };
1C99999B14D8CA9C00451D60 /* OFAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C99999A14D8CA9C00451D60 /* OFAppDelegate.m */; };
1C9999A314D8CB9800451D60 /* OFMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C9999A214D8CB9800451D60 /* OFMainViewController.m */; };
+ 1CA0C519153FE1950095D617 /* ipad-button-demo.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C517153FE1950095D617 /* ipad-button-demo.png */; };
+ 1CA0C51A153FE1950095D617 /* ipad-button-demo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C518153FE1950095D617 /* ipad-button-demo@2x.png */; };
+ 1CA0C522153FF6430095D617 /* toms.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C51E153FF6430095D617 /* toms.png */; };
+ 1CA0C523153FF6430095D617 /* toms@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C51F153FF6430095D617 /* toms@2x.png */; };
+ 1CA0C52E153FFB3D0095D617 /* typography@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C524153FFB3C0095D617 /* typography@2x.png */; };
+ 1CA0C52F153FFB3D0095D617 /* typography.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C525153FFB3D0095D617 /* typography.png */; };
+ 1CA0C532153FFB3D0095D617 /* rally-2.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C528153FFB3D0095D617 /* rally-2.png */; };
+ 1CA0C533153FFB3D0095D617 /* rally-2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C529153FFB3D0095D617 /* rally-2@2x.png */; };
+ 1CA0C534153FFB3D0095D617 /* rally.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C52A153FFB3D0095D617 /* rally.png */; };
+ 1CA0C535153FFB3D0095D617 /* rally@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C52B153FFB3D0095D617 /* rally@2x.png */; };
+ 1CA0C536153FFB3D0095D617 /* fruit.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C52C153FFB3D0095D617 /* fruit.png */; };
+ 1CA0C537153FFB3D0095D617 /* fruit@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C52D153FFB3D0095D617 /* fruit@2x.png */; };
+ 1CA0C5461540049A0095D617 /* jupiter.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C5441540049A0095D617 /* jupiter.png */; };
+ 1CA0C5471540049A0095D617 /* jupiter@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C5451540049A0095D617 /* jupiter@2x.png */; };
+ 1CA0C54A154005A90095D617 /* dog-frisbee.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C548154005A90095D617 /* dog-frisbee.png */; };
+ 1CA0C54B154005A90095D617 /* dog-frisbee@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C549154005A90095D617 /* dog-frisbee@2x.png */; };
+ 1CA0C54E154008860095D617 /* ipad-button-invert.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C54C154008860095D617 /* ipad-button-invert.png */; };
+ 1CA0C54F154008860095D617 /* ipad-button-invert@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C54D154008860095D617 /* ipad-button-invert@2x.png */; };
+ 1CA0C55215400A700095D617 /* ipad-button-contrast.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C55015400A700095D617 /* ipad-button-contrast.png */; };
+ 1CA0C55315400A700095D617 /* ipad-button-contrast@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C55115400A700095D617 /* ipad-button-contrast@2x.png */; };
+ 1CA0C5601540108D0095D617 /* ipad-button-brightness.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C5541540108D0095D617 /* ipad-button-brightness.png */; };
+ 1CA0C5611540108D0095D617 /* ipad-button-brightness@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C5551540108D0095D617 /* ipad-button-brightness@2x.png */; };
+ 1CA0C5621540108D0095D617 /* ipad-button-fast-edges.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C5561540108D0095D617 /* ipad-button-fast-edges.png */; };
+ 1CA0C5631540108D0095D617 /* ipad-button-fast-edges@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C5571540108D0095D617 /* ipad-button-fast-edges@2x.png */; };
+ 1CA0C5641540108D0095D617 /* ipad-button-gamma.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C5581540108D0095D617 /* ipad-button-gamma.png */; };
+ 1CA0C5651540108D0095D617 /* ipad-button-gamma@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C5591540108D0095D617 /* ipad-button-gamma@2x.png */; };
+ 1CA0C5661540108D0095D617 /* ipad-button-gradient-magnitude.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C55A1540108D0095D617 /* ipad-button-gradient-magnitude.png */; };
+ 1CA0C5671540108D0095D617 /* ipad-button-gradient-magnitude@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C55B1540108D0095D617 /* ipad-button-gradient-magnitude@2x.png */; };
+ 1CA0C5681540108D0095D617 /* ipad-button-sobel-edges.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C55C1540108D0095D617 /* ipad-button-sobel-edges.png */; };
+ 1CA0C5691540108D0095D617 /* ipad-button-sobel-edges@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C55D1540108D0095D617 /* ipad-button-sobel-edges@2x.png */; };
+ 1CA0C56A1540108D0095D617 /* ipad-button-threshold.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C55E1540108D0095D617 /* ipad-button-threshold.png */; };
+ 1CA0C56B1540108D0095D617 /* ipad-button-threshold@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C55F1540108D0095D617 /* ipad-button-threshold@2x.png */; };
+ 1CA0C574154017BE0095D617 /* ipad-button-cartoon.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C56C154017BE0095D617 /* ipad-button-cartoon.png */; };
+ 1CA0C575154017BE0095D617 /* ipad-button-cartoon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C56D154017BE0095D617 /* ipad-button-cartoon@2x.png */; };
+ 1CA0C576154017BE0095D617 /* ipad-button-posterize.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C56E154017BE0095D617 /* ipad-button-posterize.png */; };
+ 1CA0C577154017BE0095D617 /* ipad-button-posterize@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C56F154017BE0095D617 /* ipad-button-posterize@2x.png */; };
+ 1CA0C578154017BE0095D617 /* ipad-button-sharp.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C570154017BE0095D617 /* ipad-button-sharp.png */; };
+ 1CA0C579154017BE0095D617 /* ipad-button-sharp@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C571154017BE0095D617 /* ipad-button-sharp@2x.png */; };
+ 1CA0C57A154017BE0095D617 /* ipad-button-blur.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C572154017BE0095D617 /* ipad-button-blur.png */; };
+ 1CA0C57B154017BE0095D617 /* ipad-button-blur@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C573154017BE0095D617 /* ipad-button-blur@2x.png */; };
+ 1CA0C57E15401DE00095D617 /* sketch-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C57C15401DE00095D617 /* sketch-button.png */; };
+ 1CA0C57F15401DE00095D617 /* sketch-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C57D15401DE00095D617 /* sketch-button@2x.png */; };
+ 1CA0C58215401E5D0095D617 /* ipad-button-sketch.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C58015401E5D0095D617 /* ipad-button-sketch.png */; };
+ 1CA0C58315401E5D0095D617 /* ipad-button-sketch@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C58115401E5D0095D617 /* ipad-button-sketch@2x.png */; };
+ 1CA0C58A154029920095D617 /* ipad-button-noise-reduction.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C584154029920095D617 /* ipad-button-noise-reduction.png */; };
+ 1CA0C58B154029920095D617 /* ipad-button-noise-reduction@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C585154029920095D617 /* ipad-button-noise-reduction@2x.png */; };
+ 1CA0C58C154029920095D617 /* ipad-button-erode.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C586154029920095D617 /* ipad-button-erode.png */; };
+ 1CA0C58D154029920095D617 /* ipad-button-erode@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C587154029920095D617 /* ipad-button-erode@2x.png */; };
+ 1CA0C58E154029920095D617 /* ipad-button-dilate.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C588154029920095D617 /* ipad-button-dilate.png */; };
+ 1CA0C58F154029920095D617 /* ipad-button-dilate@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C589154029920095D617 /* ipad-button-dilate@2x.png */; };
+ 1CA0C59215402E220095D617 /* button-demo-photos.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C59015402E220095D617 /* button-demo-photos.png */; };
+ 1CA0C59315402E220095D617 /* button-demo-photos@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C59115402E220095D617 /* button-demo-photos@2x.png */; };
+ 1CA0C59615402E2F0095D617 /* ipad-button-change-photo.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C59415402E2F0095D617 /* ipad-button-change-photo.png */; };
+ 1CA0C59715402E2F0095D617 /* ipad-button-change-photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CA0C59515402E2F0095D617 /* ipad-button-change-photo@2x.png */; };
1CA1BCE4152E80F2003AE721 /* OFAlgorithmHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CA1BCE3152E80F2003AE721 /* OFAlgorithmHandler.m */; };
1CA1BCE7152E9447003AE721 /* OFAlgorithmAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CA1BCE6152E9447003AE721 /* OFAlgorithmAttributes.m */; };
1CA1BCEE152FADFC003AE721 /* OFAlgorithmScrollViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CA1BCED152FADFC003AE721 /* OFAlgorithmScrollViewController.m */; };
@@ -68,18 +151,16 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
- 1C07701C152A6BA4003099B3 /* ImProc_Base.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; name = ImProc_Base.c; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Base.c"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.c; };
- 1C07701D152A6BA4003099B3 /* ImProc_Convolve.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; name = ImProc_Convolve.c; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Convolve.c"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.c; };
- 1C07701E152A6BA4003099B3 /* ImProc_Edges.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; name = ImProc_Edges.c; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Edges.c"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.c; };
- 1C07701F152A6BA4003099B3 /* ImProc_Filters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; name = ImProc_Filters.c; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Filters.c"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.c; };
- 1C077020152A6BA4003099B3 /* ImProc_Histogram.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ImProc_Histogram.c; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Histogram.c"; sourceTree = "<absolute>"; };
- 1C077021152A6BA4003099B3 /* ImProc_Utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 0; name = ImProc_Utils.c; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Utils.c"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.c; };
- 1C077022152A6BA4003099B3 /* ImProc_Base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = ImProc_Base.h; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Base.h"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
- 1C077023152A6BA4003099B3 /* ImProc_Convolve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = ImProc_Convolve.h; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Convolve.h"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
- 1C077024152A6BA4003099B3 /* ImProc_Edges.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = ImProc_Edges.h; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Edges.h"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
- 1C077025152A6BA4003099B3 /* ImProc_Filters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = ImProc_Filters.h; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Filters.h"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
- 1C077026152A6BA4003099B3 /* ImProc_Histogram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImProc_Histogram.h; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Histogram.h"; sourceTree = "<absolute>"; };
- 1C077027152A6BA4003099B3 /* ImProc_Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = ImProc_Utils.h; path = "/Users/Jamis/Dropbox/School/Senior Project/ImgProc_CLib/ImProc/ImProc_Utils.h"; sourceTree = "<absolute>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
+ 1C144B7D154085D500A64BE2 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72.png"; sourceTree = "<group>"; };
+ 1C144B7E154085D500A64BE2 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small.png"; sourceTree = "<group>"; };
+ 1C144B7F154085D500A64BE2 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
+ 1C144B80154085D500A64BE2 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = "<group>"; };
+ 1C144B851540C8F100A64BE2 /* ipad-button-change-photo-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-change-photo-2.png"; sourceTree = "<group>"; };
+ 1C144B861540C8F100A64BE2 /* ipad-button-change-photo-2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-change-photo-2@2x.png"; sourceTree = "<group>"; };
+ 1C144B891540CCA100A64BE2 /* ipad-button-static.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-static.png"; sourceTree = "<group>"; };
+ 1C144B8A1540CCA100A64BE2 /* ipad-button-static@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-static@2x.png"; sourceTree = "<group>"; };
+ 1C144B8D1540CCB100A64BE2 /* static-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "static-button.png"; sourceTree = "<group>"; };
+ 1C144B8E1540CCB100A64BE2 /* static-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "static-button@2x.png"; sourceTree = "<group>"; };
1C18534814FCB64100F86CFB /* grayscale-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "grayscale-button.png"; sourceTree = "<group>"; };
1C352FEA152BFC0800A95B29 /* edges-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "edges-button.png"; sourceTree = "<group>"; };
1C352FEB152BFC0800A95B29 /* gradient-magnitude-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "gradient-magnitude-button.png"; sourceTree = "<group>"; };
@@ -96,6 +177,35 @@
1C3D98A91534805200A7CA8A /* invert-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "invert-button@2x.png"; sourceTree = "<group>"; };
1C3D98B2153480C300A7CA8A /* sharpen-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharpen-button@2x.png"; sourceTree = "<group>"; };
1C3D98B3153480C300A7CA8A /* threshold-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "threshold-button@2x.png"; sourceTree = "<group>"; };
+ 1C6BE21A153E20520064D7F5 /* .directory */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .directory; sourceTree = "<group>"; };
+ 1C6BE21C153E20520064D7F5 /* ImProc_Base.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ImProc_Base.c; sourceTree = "<group>"; };
+ 1C6BE21D153E20520064D7F5 /* ImProc_Base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImProc_Base.h; sourceTree = "<group>"; };
+ 1C6BE21E153E20520064D7F5 /* ImProc_Color.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ImProc_Color.c; sourceTree = "<group>"; };
+ 1C6BE21F153E20520064D7F5 /* ImProc_Color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImProc_Color.h; sourceTree = "<group>"; };
+ 1C6BE220153E20520064D7F5 /* ImProc_Convolve.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ImProc_Convolve.c; sourceTree = "<group>"; };
+ 1C6BE221153E20520064D7F5 /* ImProc_Convolve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImProc_Convolve.h; sourceTree = "<group>"; };
+ 1C6BE222153E20520064D7F5 /* ImProc_Edges.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ImProc_Edges.c; sourceTree = "<group>"; };
+ 1C6BE223153E20520064D7F5 /* ImProc_Edges.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImProc_Edges.h; sourceTree = "<group>"; };
+ 1C6BE224153E20520064D7F5 /* ImProc_Effects.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ImProc_Effects.c; sourceTree = "<group>"; };
+ 1C6BE225153E20520064D7F5 /* ImProc_Effects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImProc_Effects.h; sourceTree = "<group>"; };
+ 1C6BE226153E20520064D7F5 /* ImProc_Filters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ImProc_Filters.c; sourceTree = "<group>"; };
+ 1C6BE227153E20520064D7F5 /* ImProc_Filters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImProc_Filters.h; sourceTree = "<group>"; };
+ 1C6BE228153E20520064D7F5 /* ImProc_Histogram.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ImProc_Histogram.c; sourceTree = "<group>"; };
+ 1C6BE229153E20520064D7F5 /* ImProc_Histogram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImProc_Histogram.h; sourceTree = "<group>"; };
+ 1C6BE22A153E20520064D7F5 /* ImProc_Utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ImProc_Utils.c; sourceTree = "<group>"; };
+ 1C6BE22B153E20520064D7F5 /* ImProc_Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImProc_Utils.h; sourceTree = "<group>"; };
+ 1C6BE238153E4BD60064D7F5 /* noise-reduction-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "noise-reduction-button.png"; sourceTree = "<group>"; };
+ 1C6BE239153E4BD60064D7F5 /* noise-reduction-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "noise-reduction-button@2x.png"; sourceTree = "<group>"; };
+ 1C6BE23A153E4BD60064D7F5 /* dilate-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "dilate-button.png"; sourceTree = "<group>"; };
+ 1C6BE23B153E4BD60064D7F5 /* dilate-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "dilate-button@2x.png"; sourceTree = "<group>"; };
+ 1C6BE23C153E4BD60064D7F5 /* erode-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "erode-button.png"; sourceTree = "<group>"; };
+ 1C6BE23D153E4BD60064D7F5 /* erode-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "erode-button@2x.png"; sourceTree = "<group>"; };
+ 1C6BE240153E4BD60064D7F5 /* posterize-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "posterize-button.png"; sourceTree = "<group>"; };
+ 1C6BE241153E4BD60064D7F5 /* posterize-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "posterize-button@2x.png"; sourceTree = "<group>"; };
+ 1C6BE242153E4BD60064D7F5 /* cartoon-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cartoon-button.png"; sourceTree = "<group>"; };
+ 1C6BE243153E4BD60064D7F5 /* cartoon-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cartoon-button@2x.png"; sourceTree = "<group>"; };
+ 1C6BE250153E4D0E0064D7F5 /* sobel-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sobel-button.png"; sourceTree = "<group>"; };
+ 1C6BE251153E4D0E0064D7F5 /* sobel-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sobel-button@2x.png"; sourceTree = "<group>"; };
1C71E0661517EB9F00211D8A /* ToDo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ToDo.txt; sourceTree = "<group>"; };
1C71E06A1517FE1F00211D8A /* contrast-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contrast-button.png"; sourceTree = "<group>"; };
1C71E06C1517FEEE00211D8A /* brightness-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "brightness-button.png"; sourceTree = "<group>"; };
@@ -108,19 +218,25 @@
1C71E08615184B6A00211D8A /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; };
1C71E08815184B7700211D8A /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
1C71E08A15184B7D00211D8A /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
- 1C71E08C15190F6900211D8A /* OFLiveVideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFLiveVideo.h; path = ImgProc/OFLiveVideo.h; sourceTree = "<group>"; };
- 1C71E08D15190F6900211D8A /* OFLiveVideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFLiveVideo.m; path = ImgProc/OFLiveVideo.m; sourceTree = "<group>"; };
+ 1C71E08C15190F6900211D8A /* OFLiveVideoHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFLiveVideoHandler.h; path = ImgProc/OFLiveVideoHandler.h; sourceTree = "<group>"; };
+ 1C71E08D15190F6900211D8A /* OFLiveVideoHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFLiveVideoHandler.m; path = ImgProc/OFLiveVideoHandler.m; sourceTree = "<group>"; };
+ 1C7363281548B14100DA1E46 /* OFInstructionImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OFInstructionImageView.h; sourceTree = "<group>"; };
+ 1C7363291548B14100DA1E46 /* OFInstructionImagesView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OFInstructionImagesView.m; sourceTree = "<group>"; };
+ 1C73632D1548C14500DA1E46 /* instruction_overlay_ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = instruction_overlay_ipad.png; sourceTree = "<group>"; };
+ 1C73632E1548C14500DA1E46 /* instruction_overlay_ipad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "instruction_overlay_ipad@2x.png"; sourceTree = "<group>"; };
+ 1C7363311549437F00DA1E46 /* instruction_overlay_iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = instruction_overlay_iphone.png; sourceTree = "<group>"; };
+ 1C7363321549437F00DA1E46 /* instruction_overlay_iphone@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "instruction_overlay_iphone@2x.png"; sourceTree = "<group>"; };
1C73F1FC14F6015900DD1DA4 /* OFPhotoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OFPhotoView.h; sourceTree = "<group>"; };
1C73F1FD14F6015900DD1DA4 /* OFPhotoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OFPhotoView.m; sourceTree = "<group>"; };
1C73F20914F7393600DD1DA4 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = Constants.h; path = ImgProc/Constants.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
1C73F20A14F7393600DD1DA4 /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Constants.m; path = ImgProc/Constants.m; sourceTree = "<group>"; };
1C73F20C14F835D500DD1DA4 /* OFHelperFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFHelperFunctions.h; path = ImgProc/OFHelperFunctions.h; sourceTree = "<group>"; };
1C73F20D14F835D500DD1DA4 /* OFHelperFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFHelperFunctions.m; path = ImgProc/OFHelperFunctions.m; sourceTree = "<group>"; };
- 1C8C1C8614FC9A45005B9286 /* OFImageProcHelperFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OFImageProcHelperFunctions.h; sourceTree = "<group>"; };
- 1C8C1C8714FC9A45005B9286 /* OFImageProcHelperFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OFImageProcHelperFunctions.m; sourceTree = "<group>"; };
- 1C9614AC1502C1B100AFFF9A /* ImageConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageConverter.h; sourceTree = "<group>"; };
- 1C9614AD1502C1B100AFFF9A /* ImageConverter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageConverter.m; sourceTree = "<group>"; };
- 1C9614AE1502C1B100AFFF9A /* GraphicsCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsCommon.h; sourceTree = "<group>"; };
+ 1C8AC4F5154750D1006857B7 /* ImageConverter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ImageConverter.h; path = ImgProc/ImageConverter.h; sourceTree = "<group>"; };
+ 1C8AC4F7154750DF006857B7 /* ImageConverter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ImageConverter.m; path = ImgProc/ImageConverter.m; sourceTree = "<group>"; };
+ 1C8AC4F9154750E8006857B7 /* GraphicsCommon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GraphicsCommon.h; path = ImgProc/GraphicsCommon.h; sourceTree = "<group>"; };
+ 1C8AC4FA154750F4006857B7 /* OFImageProcHelperFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OFImageProcHelperFunctions.h; path = ImgProc/OFImageProcHelperFunctions.h; sourceTree = "<group>"; };
+ 1C8AC4FB154750F4006857B7 /* OFImageProcHelperFunctions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = OFImageProcHelperFunctions.m; path = ImgProc/OFImageProcHelperFunctions.m; sourceTree = "<group>"; };
1C9614B91502D8CD00AFFF9A /* invert-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "invert-button.png"; sourceTree = "<group>"; };
1C99998614D8CA9C00451D60 /* ImgProc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ImgProc.app; sourceTree = BUILT_PRODUCTS_DIR; };
1C99998A14D8CA9C00451D60 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
@@ -134,6 +250,60 @@
1C99999A14D8CA9C00451D60 /* OFAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = OFAppDelegate.m; path = ImgProc/OFAppDelegate.m; sourceTree = "<group>"; };
1C9999A114D8CB9800451D60 /* OFMainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = OFMainViewController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
1C9999A214D8CB9800451D60 /* OFMainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = OFMainViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
+ 1CA0C517153FE1950095D617 /* ipad-button-demo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-demo.png"; sourceTree = "<group>"; };
+ 1CA0C518153FE1950095D617 /* ipad-button-demo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-demo@2x.png"; sourceTree = "<group>"; };
+ 1CA0C51E153FF6430095D617 /* toms.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = toms.png; sourceTree = "<group>"; };
+ 1CA0C51F153FF6430095D617 /* toms@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "toms@2x.png"; sourceTree = "<group>"; };
+ 1CA0C524153FFB3C0095D617 /* typography@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "typography@2x.png"; sourceTree = "<group>"; };
+ 1CA0C525153FFB3D0095D617 /* typography.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = typography.png; sourceTree = "<group>"; };
+ 1CA0C528153FFB3D0095D617 /* rally-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "rally-2.png"; sourceTree = "<group>"; };
+ 1CA0C529153FFB3D0095D617 /* rally-2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "rally-2@2x.png"; sourceTree = "<group>"; };
+ 1CA0C52A153FFB3D0095D617 /* rally.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = rally.png; sourceTree = "<group>"; };
+ 1CA0C52B153FFB3D0095D617 /* rally@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "rally@2x.png"; sourceTree = "<group>"; };
+ 1CA0C52C153FFB3D0095D617 /* fruit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = fruit.png; sourceTree = "<group>"; };
+ 1CA0C52D153FFB3D0095D617 /* fruit@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fruit@2x.png"; sourceTree = "<group>"; };
+ 1CA0C5441540049A0095D617 /* jupiter.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = jupiter.png; sourceTree = "<group>"; };
+ 1CA0C5451540049A0095D617 /* jupiter@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "jupiter@2x.png"; sourceTree = "<group>"; };
+ 1CA0C548154005A90095D617 /* dog-frisbee.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "dog-frisbee.png"; sourceTree = "<group>"; };
+ 1CA0C549154005A90095D617 /* dog-frisbee@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "dog-frisbee@2x.png"; sourceTree = "<group>"; };
+ 1CA0C54C154008860095D617 /* ipad-button-invert.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-invert.png"; sourceTree = "<group>"; };
+ 1CA0C54D154008860095D617 /* ipad-button-invert@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-invert@2x.png"; sourceTree = "<group>"; };
+ 1CA0C55015400A700095D617 /* ipad-button-contrast.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-contrast.png"; sourceTree = "<group>"; };
+ 1CA0C55115400A700095D617 /* ipad-button-contrast@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-contrast@2x.png"; sourceTree = "<group>"; };
+ 1CA0C5541540108D0095D617 /* ipad-button-brightness.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-brightness.png"; sourceTree = "<group>"; };
+ 1CA0C5551540108D0095D617 /* ipad-button-brightness@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-brightness@2x.png"; sourceTree = "<group>"; };
+ 1CA0C5561540108D0095D617 /* ipad-button-fast-edges.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-fast-edges.png"; sourceTree = "<group>"; };
+ 1CA0C5571540108D0095D617 /* ipad-button-fast-edges@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-fast-edges@2x.png"; sourceTree = "<group>"; };
+ 1CA0C5581540108D0095D617 /* ipad-button-gamma.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-gamma.png"; sourceTree = "<group>"; };
+ 1CA0C5591540108D0095D617 /* ipad-button-gamma@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-gamma@2x.png"; sourceTree = "<group>"; };
+ 1CA0C55A1540108D0095D617 /* ipad-button-gradient-magnitude.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-gradient-magnitude.png"; sourceTree = "<group>"; };
+ 1CA0C55B1540108D0095D617 /* ipad-button-gradient-magnitude@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-gradient-magnitude@2x.png"; sourceTree = "<group>"; };
+ 1CA0C55C1540108D0095D617 /* ipad-button-sobel-edges.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-sobel-edges.png"; sourceTree = "<group>"; };
+ 1CA0C55D1540108D0095D617 /* ipad-button-sobel-edges@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-sobel-edges@2x.png"; sourceTree = "<group>"; };
+ 1CA0C55E1540108D0095D617 /* ipad-button-threshold.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-threshold.png"; sourceTree = "<group>"; };
+ 1CA0C55F1540108D0095D617 /* ipad-button-threshold@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-threshold@2x.png"; sourceTree = "<group>"; };
+ 1CA0C56C154017BE0095D617 /* ipad-button-cartoon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-cartoon.png"; sourceTree = "<group>"; };
+ 1CA0C56D154017BE0095D617 /* ipad-button-cartoon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-cartoon@2x.png"; sourceTree = "<group>"; };
+ 1CA0C56E154017BE0095D617 /* ipad-button-posterize.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-posterize.png"; sourceTree = "<group>"; };
+ 1CA0C56F154017BE0095D617 /* ipad-button-posterize@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-posterize@2x.png"; sourceTree = "<group>"; };
+ 1CA0C570154017BE0095D617 /* ipad-button-sharp.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-sharp.png"; sourceTree = "<group>"; };
+ 1CA0C571154017BE0095D617 /* ipad-button-sharp@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-sharp@2x.png"; sourceTree = "<group>"; };
+ 1CA0C572154017BE0095D617 /* ipad-button-blur.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-blur.png"; sourceTree = "<group>"; };
+ 1CA0C573154017BE0095D617 /* ipad-button-blur@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-blur@2x.png"; sourceTree = "<group>"; };
+ 1CA0C57C15401DE00095D617 /* sketch-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sketch-button.png"; sourceTree = "<group>"; };
+ 1CA0C57D15401DE00095D617 /* sketch-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sketch-button@2x.png"; sourceTree = "<group>"; };
+ 1CA0C58015401E5D0095D617 /* ipad-button-sketch.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-sketch.png"; sourceTree = "<group>"; };
+ 1CA0C58115401E5D0095D617 /* ipad-button-sketch@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-sketch@2x.png"; sourceTree = "<group>"; };
+ 1CA0C584154029920095D617 /* ipad-button-noise-reduction.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-noise-reduction.png"; sourceTree = "<group>"; };
+ 1CA0C585154029920095D617 /* ipad-button-noise-reduction@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-noise-reduction@2x.png"; sourceTree = "<group>"; };
+ 1CA0C586154029920095D617 /* ipad-button-erode.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-erode.png"; sourceTree = "<group>"; };
+ 1CA0C587154029920095D617 /* ipad-button-erode@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-erode@2x.png"; sourceTree = "<group>"; };
+ 1CA0C588154029920095D617 /* ipad-button-dilate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-dilate.png"; sourceTree = "<group>"; };
+ 1CA0C589154029920095D617 /* ipad-button-dilate@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-dilate@2x.png"; sourceTree = "<group>"; };
+ 1CA0C59015402E220095D617 /* button-demo-photos.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-demo-photos.png"; sourceTree = "<group>"; };
+ 1CA0C59115402E220095D617 /* button-demo-photos@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-demo-photos@2x.png"; sourceTree = "<group>"; };
+ 1CA0C59415402E2F0095D617 /* ipad-button-change-photo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-change-photo.png"; sourceTree = "<group>"; };
+ 1CA0C59515402E2F0095D617 /* ipad-button-change-photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ipad-button-change-photo@2x.png"; sourceTree = "<group>"; };
1CA1BCE2152E80F2003AE721 /* OFAlgorithmHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFAlgorithmHandler.h; path = ImgProc/OFAlgorithmHandler.h; sourceTree = "<group>"; };
1CA1BCE3152E80F2003AE721 /* OFAlgorithmHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFAlgorithmHandler.m; path = ImgProc/OFAlgorithmHandler.m; sourceTree = "<group>"; };
1CA1BCE5152E9447003AE721 /* OFAlgorithmAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFAlgorithmAttributes.h; path = ImgProc/OFAlgorithmAttributes.h; sourceTree = "<group>"; };
@@ -145,9 +315,6 @@
1CC5B6D1151AE7370073AAED /* UIImage-Extensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIImage-Extensions.m"; path = "ImgProc/UIImage-Extensions.m"; sourceTree = "<group>"; };
1CEF6B40150BD17D00021907 /* OFAlgorithmControlsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OFAlgorithmControlsView.h; sourceTree = "<group>"; };
1CEF6B41150BD17D00021907 /* OFAlgorithmControlsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OFAlgorithmControlsView.m; sourceTree = "<group>"; };
- 1CFFFC30153A1CEF000E362F /* ImProc_Effects.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ImProc_Effects.c; sourceTree = SOURCE_ROOT; };
- 1CFFFC31153A1CEF000E362F /* ImProc_Color.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImProc_Color.h; sourceTree = SOURCE_ROOT; };
- 1CFFFC32153A1CEF000E362F /* ImProc_Effects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImProc_Effects.h; sourceTree = SOURCE_ROOT; };
1CFFFC35153A2C77000E362F /* cassius.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = cassius.png; sourceTree = "<group>"; };
1CFFFC36153A2C77000E362F /* cassius@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cassius@2x.png"; sourceTree = "<group>"; };
1CFFFC39153A2D47000E362F /* flatiron.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = flatiron.png; sourceTree = "<group>"; };
@@ -176,6 +343,17 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 1C144B7B154085CB00A64BE2 /* Icons */ = {
+ isa = PBXGroup;
+ children = (
+ 1C144B7D154085D500A64BE2 /* Icon-72.png */,
+ 1C144B7E154085D500A64BE2 /* Icon-Small.png */,
+ 1C144B7F154085D500A64BE2 /* Icon.png */,
+ 1C144B80154085D500A64BE2 /* Icon@2x.png */,
+ );
+ name = Icons;
+ sourceTree = "<group>";
+ };
1C18534B14FD8D7B00F86CFB /* Helpers */ = {
isa = PBXGroup;
children = (
@@ -183,8 +361,8 @@
1C9614AA1502C18E00AFFF9A /* Image */,
1C73F20914F7393600DD1DA4 /* Constants.h */,
1C73F20A14F7393600DD1DA4 /* Constants.m */,
- 1C8C1C8614FC9A45005B9286 /* OFImageProcHelperFunctions.h */,
- 1C8C1C8714FC9A45005B9286 /* OFImageProcHelperFunctions.m */,
+ 1C8AC4FA154750F4006857B7 /* OFImageProcHelperFunctions.h */,
+ 1C8AC4FB154750F4006857B7 /* OFImageProcHelperFunctions.m */,
1C73F20C14F835D500DD1DA4 /* OFHelperFunctions.h */,
1C73F20D14F835D500DD1DA4 /* OFHelperFunctions.m */,
1CA1BCE2152E80F2003AE721 /* OFAlgorithmHandler.h */,
@@ -195,35 +373,47 @@
name = Helpers;
sourceTree = "<group>";
};
- 1C18534D14FD8F7C00F86CFB /* ImProc_CLib */ = {
+ 1C6BE219153E20510064D7F5 /* ImProc */ = {
isa = PBXGroup;
children = (
- 1C07701C152A6BA4003099B3 /* ImProc_Base.c */,
- 1C077022152A6BA4003099B3 /* ImProc_Base.h */,
- 1CFFFC31153A1CEF000E362F /* ImProc_Color.h */,
- 1C07701E152A6BA4003099B3 /* ImProc_Edges.c */,
- 1C077024152A6BA4003099B3 /* ImProc_Edges.h */,
- 1CFFFC30153A1CEF000E362F /* ImProc_Effects.c */,
- 1CFFFC32153A1CEF000E362F /* ImProc_Effects.h */,
- 1C07701F152A6BA4003099B3 /* ImProc_Filters.c */,
- 1C077025152A6BA4003099B3 /* ImProc_Filters.h */,
- 1C077020152A6BA4003099B3 /* ImProc_Histogram.c */,
- 1C077026152A6BA4003099B3 /* ImProc_Histogram.h */,
- 1C07701D152A6BA4003099B3 /* ImProc_Convolve.c */,
- 1C077023152A6BA4003099B3 /* ImProc_Convolve.h */,
- 1C077021152A6BA4003099B3 /* ImProc_Utils.c */,
- 1C077027152A6BA4003099B3 /* ImProc_Utils.h */,
+ 1C6BE21A153E20520064D7F5 /* .directory */,
+ 1C6BE21C153E20520064D7F5 /* ImProc_Base.c */,
+ 1C6BE21D153E20520064D7F5 /* ImProc_Base.h */,
+ 1C6BE21E153E20520064D7F5 /* ImProc_Color.c */,
+ 1C6BE21F153E20520064D7F5 /* ImProc_Color.h */,
+ 1C6BE220153E20520064D7F5 /* ImProc_Convolve.c */,
+ 1C6BE221153E20520064D7F5 /* ImProc_Convolve.h */,
+ 1C6BE222153E20520064D7F5 /* ImProc_Edges.c */,
+ 1C6BE223153E20520064D7F5 /* ImProc_Edges.h */,
+ 1C6BE224153E20520064D7F5 /* ImProc_Effects.c */,
+ 1C6BE225153E20520064D7F5 /* ImProc_Effects.h */,
+ 1C6BE226153E20520064D7F5 /* ImProc_Filters.c */,
+ 1C6BE227153E20520064D7F5 /* ImProc_Filters.h */,
+ 1C6BE228153E20520064D7F5 /* ImProc_Histogram.c */,
+ 1C6BE229153E20520064D7F5 /* ImProc_Histogram.h */,
+ 1C6BE22A153E20520064D7F5 /* ImProc_Utils.c */,
+ 1C6BE22B153E20520064D7F5 /* ImProc_Utils.h */,
);
- name = ImProc_CLib;
path = ImProc;
sourceTree = "<group>";
};
+ 1C73632C1548C13800DA1E46 /* Instruction Overlays */ = {
+ isa = PBXGroup;
+ children = (
+ 1C7363311549437F00DA1E46 /* instruction_overlay_iphone.png */,
+ 1C7363321549437F00DA1E46 /* instruction_overlay_iphone@2x.png */,
+ 1C73632D1548C14500DA1E46 /* instruction_overlay_ipad.png */,
+ 1C73632E1548C14500DA1E46 /* instruction_overlay_ipad@2x.png */,
+ );
+ name = "Instruction Overlays";
+ sourceTree = "<group>";
+ };
1C9614AA1502C18E00AFFF9A /* Image */ = {
isa = PBXGroup;
children = (
- 1C9614AC1502C1B100AFFF9A /* ImageConverter.h */,
- 1C9614AD1502C1B100AFFF9A /* ImageConverter.m */,
- 1C9614AE1502C1B100AFFF9A /* GraphicsCommon.h */,
+ 1C8AC4F5154750D1006857B7 /* ImageConverter.h */,
+ 1C8AC4F7154750DF006857B7 /* ImageConverter.m */,
+ 1C8AC4F9154750E8006857B7 /* GraphicsCommon.h */,
1CC5B6D0151AE7370073AAED /* UIImage-Extensions.h */,
1CC5B6D1151AE7370073AAED /* UIImage-Extensions.m */,
);
@@ -233,27 +423,9 @@
1C9614BD1502D8D200AFFF9A /* Buttons */ = {
isa = PBXGroup;
children = (
- 1C3D98981532CFDB00A7CA8A /* button-demo.png */,
- 1C3D98991532CFDB00A7CA8A /* button-demo@2x.png */,
- 1C352FEF152BFCF000A95B29 /* blur-button.png */,
- 1C3D98A21534805200A7CA8A /* blur-button@2x.png */,
- 1C71E06C1517FEEE00211D8A /* brightness-button.png */,
- 1C3D98A31534805200A7CA8A /* brightness-button@2x.png */,
- 1C71E06A1517FE1F00211D8A /* contrast-button.png */,
- 1C3D98A41534805200A7CA8A /* contrast-button@2x.png */,
- 1C352FEA152BFC0800A95B29 /* edges-button.png */,
- 1C3D98A51534805200A7CA8A /* edges-button@2x.png */,
- 1C71E0701518006C00211D8A /* gamma-button.png */,
- 1C3D98A71534805200A7CA8A /* gamma-button@2x.png */,
- 1C352FEB152BFC0800A95B29 /* gradient-magnitude-button.png */,
- 1C3D98A81534805200A7CA8A /* gradient-magnitude-button@2x.png */,
- 1C9614B91502D8CD00AFFF9A /* invert-button.png */,
- 1C3D98A91534805200A7CA8A /* invert-button@2x.png */,
- 1C352FF0152BFCF000A95B29 /* sharpen-button.png */,
- 1C3D98B2153480C300A7CA8A /* sharpen-button@2x.png */,
- 1C71E06E1517FFBD00211D8A /* threshold-button.png */,
- 1C3D98B3153480C300A7CA8A /* threshold-button@2x.png */,
- 1C18534814FCB64100F86CFB /* grayscale-button.png */,
+ 1C144B7B154085CB00A64BE2 /* Icons */,
+ 1CA0C51B153FE8A30095D617 /* iPhone Buttons */,
+ 1CA0C516153FE18B0095D617 /* iPad Buttons */,
);
name = Buttons;
sourceTree = "<group>";
@@ -267,7 +439,7 @@
1C9999B314D8F62800451D60 /* Resources */,
1C99999014D8CA9C00451D60 /* ViewControllers */,
1C18534B14FD8D7B00F86CFB /* Helpers */,
- 1C18534D14FD8F7C00F86CFB /* ImProc_CLib */,
+ 1C6BE219153E20510064D7F5 /* ImProc */,
1C99999114D8CA9C00451D60 /* Supporting Files */,
1C99998914D8CA9C00451D60 /* Frameworks */,
1C99998714D8CA9C00451D60 /* Products */,
@@ -311,6 +483,8 @@
1CEF6B41150BD17D00021907 /* OFAlgorithmControlsView.m */,
1CA1BCEC152FADFC003AE721 /* OFAlgorithmScrollViewController.h */,
1CA1BCED152FADFC003AE721 /* OFAlgorithmScrollViewController.m */,
+ 1C7363281548B14100DA1E46 /* OFInstructionImageView.h */,
+ 1C7363291548B14100DA1E46 /* OFInstructionImagesView.m */,
);
name = ViewControllers;
path = ImgProc;
@@ -331,20 +505,128 @@
1C9999B314D8F62800451D60 /* Resources */ = {
isa = PBXGroup;
children = (
+ 1C73632C1548C13800DA1E46 /* Instruction Overlays */,
1C9614BD1502D8D200AFFF9A /* Buttons */,
1CFFFC35153A2C77000E362F /* cassius.png */,
1CFFFC36153A2C77000E362F /* cassius@2x.png */,
+ 1CA0C548154005A90095D617 /* dog-frisbee.png */,
+ 1CA0C549154005A90095D617 /* dog-frisbee@2x.png */,
1CFFFC39153A2D47000E362F /* flatiron.png */,
1CFFFC3A153A2D47000E362F /* flatiron@2x.png */,
+ 1CA0C51E153FF6430095D617 /* toms.png */,
+ 1CA0C51F153FF6430095D617 /* toms@2x.png */,
+ 1CA0C524153FFB3C0095D617 /* typography@2x.png */,
+ 1CA0C525153FFB3D0095D617 /* typography.png */,
+ 1CA0C528153FFB3D0095D617 /* rally-2.png */,
+ 1CA0C529153FFB3D0095D617 /* rally-2@2x.png */,
+ 1CA0C52A153FFB3D0095D617 /* rally.png */,
+ 1CA0C52B153FFB3D0095D617 /* rally@2x.png */,
+ 1CA0C52C153FFB3D0095D617 /* fruit.png */,
+ 1CA0C52D153FFB3D0095D617 /* fruit@2x.png */,
+ 1CA0C5441540049A0095D617 /* jupiter.png */,
+ 1CA0C5451540049A0095D617 /* jupiter@2x.png */,
);
name = Resources;
sourceTree = "<group>";
};
+ 1CA0C516153FE18B0095D617 /* iPad Buttons */ = {
+ isa = PBXGroup;
+ children = (
+ 1C144B851540C8F100A64BE2 /* ipad-button-change-photo-2.png */,
+ 1C144B861540C8F100A64BE2 /* ipad-button-change-photo-2@2x.png */,
+ 1CA0C59415402E2F0095D617 /* ipad-button-change-photo.png */,
+ 1CA0C59515402E2F0095D617 /* ipad-button-change-photo@2x.png */,
+ 1CA0C58015401E5D0095D617 /* ipad-button-sketch.png */,
+ 1CA0C58115401E5D0095D617 /* ipad-button-sketch@2x.png */,
+ 1CA0C56C154017BE0095D617 /* ipad-button-cartoon.png */,
+ 1CA0C56D154017BE0095D617 /* ipad-button-cartoon@2x.png */,
+ 1CA0C56E154017BE0095D617 /* ipad-button-posterize.png */,
+ 1CA0C56F154017BE0095D617 /* ipad-button-posterize@2x.png */,
+ 1CA0C570154017BE0095D617 /* ipad-button-sharp.png */,
+ 1CA0C571154017BE0095D617 /* ipad-button-sharp@2x.png */,
+ 1C144B891540CCA100A64BE2 /* ipad-button-static.png */,
+ 1C144B8A1540CCA100A64BE2 /* ipad-button-static@2x.png */,
+ 1CA0C572154017BE0095D617 /* ipad-button-blur.png */,
+ 1CA0C573154017BE0095D617 /* ipad-button-blur@2x.png */,
+ 1CA0C584154029920095D617 /* ipad-button-noise-reduction.png */,
+ 1CA0C585154029920095D617 /* ipad-button-noise-reduction@2x.png */,
+ 1CA0C586154029920095D617 /* ipad-button-erode.png */,
+ 1CA0C587154029920095D617 /* ipad-button-erode@2x.png */,
+ 1CA0C588154029920095D617 /* ipad-button-dilate.png */,
+ 1CA0C589154029920095D617 /* ipad-button-dilate@2x.png */,
+ 1CA0C5541540108D0095D617 /* ipad-button-brightness.png */,
+ 1CA0C5551540108D0095D617 /* ipad-button-brightness@2x.png */,
+ 1CA0C5561540108D0095D617 /* ipad-button-fast-edges.png */,
+ 1CA0C5571540108D0095D617 /* ipad-button-fast-edges@2x.png */,
+ 1CA0C5581540108D0095D617 /* ipad-button-gamma.png */,
+ 1CA0C5591540108D0095D617 /* ipad-button-gamma@2x.png */,
+ 1CA0C55A1540108D0095D617 /* ipad-button-gradient-magnitude.png */,
+ 1CA0C55B1540108D0095D617 /* ipad-button-gradient-magnitude@2x.png */,
+ 1CA0C55C1540108D0095D617 /* ipad-button-sobel-edges.png */,
+ 1CA0C55D1540108D0095D617 /* ipad-button-sobel-edges@2x.png */,
+ 1CA0C55E1540108D0095D617 /* ipad-button-threshold.png */,
+ 1CA0C55F1540108D0095D617 /* ipad-button-threshold@2x.png */,
+ 1CA0C55015400A700095D617 /* ipad-button-contrast.png */,
+ 1CA0C55115400A700095D617 /* ipad-button-contrast@2x.png */,
+ 1CA0C517153FE1950095D617 /* ipad-button-demo.png */,
+ 1CA0C518153FE1950095D617 /* ipad-button-demo@2x.png */,
+ 1CA0C54C154008860095D617 /* ipad-button-invert.png */,
+ 1CA0C54D154008860095D617 /* ipad-button-invert@2x.png */,
+ );
+ name = "iPad Buttons";
+ sourceTree = "<group>";
+ };
+ 1CA0C51B153FE8A30095D617 /* iPhone Buttons */ = {
+ isa = PBXGroup;
+ children = (
+ 1CA0C59015402E220095D617 /* button-demo-photos.png */,
+ 1CA0C59115402E220095D617 /* button-demo-photos@2x.png */,
+ 1C6BE250153E4D0E0064D7F5 /* sobel-button.png */,
+ 1C6BE251153E4D0E0064D7F5 /* sobel-button@2x.png */,
+ 1C6BE238153E4BD60064D7F5 /* noise-reduction-button.png */,
+ 1C6BE239153E4BD60064D7F5 /* noise-reduction-button@2x.png */,
+ 1C6BE23A153E4BD60064D7F5 /* dilate-button.png */,
+ 1C6BE23B153E4BD60064D7F5 /* dilate-button@2x.png */,
+ 1C6BE23C153E4BD60064D7F5 /* erode-button.png */,
+ 1C6BE23D153E4BD60064D7F5 /* erode-button@2x.png */,
+ 1CA0C57C15401DE00095D617 /* sketch-button.png */,
+ 1CA0C57D15401DE00095D617 /* sketch-button@2x.png */,
+ 1C6BE240153E4BD60064D7F5 /* posterize-button.png */,
+ 1C6BE241153E4BD60064D7F5 /* posterize-button@2x.png */,
+ 1C6BE242153E4BD60064D7F5 /* cartoon-button.png */,
+ 1C6BE243153E4BD60064D7F5 /* cartoon-button@2x.png */,
+ 1C3D98981532CFDB00A7CA8A /* button-demo.png */,
+ 1C3D98991532CFDB00A7CA8A /* button-demo@2x.png */,
+ 1C352FEF152BFCF000A95B29 /* blur-button.png */,
+ 1C3D98A21534805200A7CA8A /* blur-button@2x.png */,
+ 1C71E06C1517FEEE00211D8A /* brightness-button.png */,
+ 1C3D98A31534805200A7CA8A /* brightness-button@2x.png */,
+ 1C71E06A1517FE1F00211D8A /* contrast-button.png */,
+ 1C3D98A41534805200A7CA8A /* contrast-button@2x.png */,
+ 1C144B8D1540CCB100A64BE2 /* static-button.png */,
+ 1C144B8E1540CCB100A64BE2 /* static-button@2x.png */,
+ 1C352FEA152BFC0800A95B29 /* edges-button.png */,
+ 1C3D98A51534805200A7CA8A /* edges-button@2x.png */,
+ 1C71E0701518006C00211D8A /* gamma-button.png */,
+ 1C3D98A71534805200A7CA8A /* gamma-button@2x.png */,
+ 1C352FEB152BFC0800A95B29 /* gradient-magnitude-button.png */,
+ 1C3D98A81534805200A7CA8A /* gradient-magnitude-button@2x.png */,
+ 1C9614B91502D8CD00AFFF9A /* invert-button.png */,
+ 1C3D98A91534805200A7CA8A /* invert-button@2x.png */,
+ 1C352FF0152BFCF000A95B29 /* sharpen-button.png */,
+ 1C3D98B2153480C300A7CA8A /* sharpen-button@2x.png */,
+ 1C71E06E1517FFBD00211D8A /* threshold-button.png */,
+ 1C3D98B3153480C300A7CA8A /* threshold-button@2x.png */,
+ 1C18534814FCB64100F86CFB /* grayscale-button.png */,
+ );
+ name = "iPhone Buttons";
+ sourceTree = "<group>";
+ };
1CDA89E515150D56002B07D1 /* Video */ = {
isa = PBXGroup;
children = (
- 1C71E08C15190F6900211D8A /* OFLiveVideo.h */,
- 1C71E08D15190F6900211D8A /* OFLiveVideo.m */,
+ 1C71E08C15190F6900211D8A /* OFLiveVideoHandler.h */,
+ 1C71E08D15190F6900211D8A /* OFLiveVideoHandler.m */,
);
name = Video;
sourceTree = "<group>";
@@ -427,6 +709,87 @@
1CFFFC38153A2C77000E362F /* cassius@2x.png in Resources */,
1CFFFC3B153A2D47000E362F /* flatiron.png in Resources */,
1CFFFC3C153A2D47000E362F /* flatiron@2x.png in Resources */,
+ 1C6BE22D153E20520064D7F5 /* .directory in Resources */,
+ 1C6BE244153E4BD60064D7F5 /* noise-reduction-button.png in Resources */,
+ 1C6BE245153E4BD60064D7F5 /* noise-reduction-button@2x.png in Resources */,
+ 1C6BE246153E4BD60064D7F5 /* dilate-button.png in Resources */,
+ 1C6BE247153E4BD60064D7F5 /* dilate-button@2x.png in Resources */,
+ 1C6BE248153E4BD60064D7F5 /* erode-button.png in Resources */,
+ 1C6BE249153E4BD60064D7F5 /* erode-button@2x.png in Resources */,
+ 1C6BE24C153E4BD60064D7F5 /* posterize-button.png in Resources */,
+ 1C6BE24D153E4BD60064D7F5 /* posterize-button@2x.png in Resources */,
+ 1C6BE24E153E4BD60064D7F5 /* cartoon-button.png in Resources */,
+ 1C6BE24F153E4BD60064D7F5 /* cartoon-button@2x.png in Resources */,
+ 1C6BE252153E4D0E0064D7F5 /* sobel-button.png in Resources */,
+ 1C6BE253153E4D0E0064D7F5 /* sobel-button@2x.png in Resources */,
+ 1CA0C519153FE1950095D617 /* ipad-button-demo.png in Resources */,
+ 1CA0C51A153FE1950095D617 /* ipad-button-demo@2x.png in Resources */,
+ 1CA0C522153FF6430095D617 /* toms.png in Resources */,
+ 1CA0C523153FF6430095D617 /* toms@2x.png in Resources */,
+ 1CA0C52E153FFB3D0095D617 /* typography@2x.png in Resources */,
+ 1CA0C52F153FFB3D0095D617 /* typography.png in Resources */,
+ 1CA0C532153FFB3D0095D617 /* rally-2.png in Resources */,
+ 1CA0C533153FFB3D0095D617 /* rally-2@2x.png in Resources */,
+ 1CA0C534153FFB3D0095D617 /* rally.png in Resources */,
+ 1CA0C535153FFB3D0095D617 /* rally@2x.png in Resources */,
+ 1CA0C536153FFB3D0095D617 /* fruit.png in Resources */,
+ 1CA0C537153FFB3D0095D617 /* fruit@2x.png in Resources */,
+ 1CA0C5461540049A0095D617 /* jupiter.png in Resources */,
+ 1CA0C5471540049A0095D617 /* jupiter@2x.png in Resources */,
+ 1CA0C54A154005A90095D617 /* dog-frisbee.png in Resources */,
+ 1CA0C54B154005A90095D617 /* dog-frisbee@2x.png in Resources */,
+ 1CA0C54E154008860095D617 /* ipad-button-invert.png in Resources */,
+ 1CA0C54F154008860095D617 /* ipad-button-invert@2x.png in Resources */,
+ 1CA0C55215400A700095D617 /* ipad-button-contrast.png in Resources */,
+ 1CA0C55315400A700095D617 /* ipad-button-contrast@2x.png in Resources */,
+ 1CA0C5601540108D0095D617 /* ipad-button-brightness.png in Resources */,
+ 1CA0C5611540108D0095D617 /* ipad-button-brightness@2x.png in Resources */,
+ 1CA0C5621540108D0095D617 /* ipad-button-fast-edges.png in Resources */,
+ 1CA0C5631540108D0095D617 /* ipad-button-fast-edges@2x.png in Resources */,
+ 1CA0C5641540108D0095D617 /* ipad-button-gamma.png in Resources */,
+ 1CA0C5651540108D0095D617 /* ipad-button-gamma@2x.png in Resources */,
+ 1CA0C5661540108D0095D617 /* ipad-button-gradient-magnitude.png in Resources */,
+ 1CA0C5671540108D0095D617 /* ipad-button-gradient-magnitude@2x.png in Resources */,
+ 1CA0C5681540108D0095D617 /* ipad-button-sobel-edges.png in Resources */,
+ 1CA0C5691540108D0095D617 /* ipad-button-sobel-edges@2x.png in Resources */,
+ 1CA0C56A1540108D0095D617 /* ipad-button-threshold.png in Resources */,
+ 1CA0C56B1540108D0095D617 /* ipad-button-threshold@2x.png in Resources */,
+ 1CA0C574154017BE0095D617 /* ipad-button-cartoon.png in Resources */,
+ 1CA0C575154017BE0095D617 /* ipad-button-cartoon@2x.png in Resources */,
+ 1CA0C576154017BE0095D617 /* ipad-button-posterize.png in Resources */,
+ 1CA0C577154017BE0095D617 /* ipad-button-posterize@2x.png in Resources */,
+ 1CA0C578154017BE0095D617 /* ipad-button-sharp.png in Resources */,
+ 1CA0C579154017BE0095D617 /* ipad-button-sharp@2x.png in Resources */,
+ 1CA0C57A154017BE0095D617 /* ipad-button-blur.png in Resources */,
+ 1CA0C57B154017BE0095D617 /* ipad-button-blur@2x.png in Resources */,
+ 1CA0C57E15401DE00095D617 /* sketch-button.png in Resources */,
+ 1CA0C57F15401DE00095D617 /* sketch-button@2x.png in Resources */,
+ 1CA0C58215401E5D0095D617 /* ipad-button-sketch.png in Resources */,
+ 1CA0C58315401E5D0095D617 /* ipad-button-sketch@2x.png in Resources */,
+ 1CA0C58A154029920095D617 /* ipad-button-noise-reduction.png in Resources */,
+ 1CA0C58B154029920095D617 /* ipad-button-noise-reduction@2x.png in Resources */,
+ 1CA0C58C154029920095D617 /* ipad-button-erode.png in Resources */,
+ 1CA0C58D154029920095D617 /* ipad-button-erode@2x.png in Resources */,
+ 1CA0C58E154029920095D617 /* ipad-button-dilate.png in Resources */,
+ 1CA0C58F154029920095D617 /* ipad-button-dilate@2x.png in Resources */,
+ 1CA0C59215402E220095D617 /* button-demo-photos.png in Resources */,
+ 1CA0C59315402E220095D617 /* button-demo-photos@2x.png in Resources */,
+ 1CA0C59615402E2F0095D617 /* ipad-button-change-photo.png in Resources */,
+ 1CA0C59715402E2F0095D617 /* ipad-button-change-photo@2x.png in Resources */,
+ 1C144B81154085D500A64BE2 /* Icon-72.png in Resources */,
+ 1C144B82154085D500A64BE2 /* Icon-Small.png in Resources */,
+ 1C144B83154085D500A64BE2 /* Icon.png in Resources */,
+ 1C144B84154085D500A64BE2 /* Icon@2x.png in Resources */,
+ 1C144B871540C8F100A64BE2 /* ipad-button-change-photo-2.png in Resources */,
+ 1C144B881540C8F100A64BE2 /* ipad-button-change-photo-2@2x.png in Resources */,
+ 1C144B8B1540CCA100A64BE2 /* ipad-button-static.png in Resources */,
+ 1C144B8C1540CCA100A64BE2 /* ipad-button-static@2x.png in Resources */,
+ 1C144B8F1540CCB100A64BE2 /* static-button.png in Resources */,
+ 1C144B901540CCB100A64BE2 /* static-button@2x.png in Resources */,
+ 1C73632F1548C14500DA1E46 /* instruction_overlay_ipad.png in Resources */,
+ 1C7363301548C14500DA1E46 /* instruction_overlay_ipad@2x.png in Resources */,
+ 1C7363331549437F00DA1E46 /* instruction_overlay_iphone.png in Resources */,
+ 1C7363341549437F00DA1E46 /* instruction_overlay_iphone@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -443,20 +806,22 @@
1C73F1FE14F6015900DD1DA4 /* OFPhotoView.m in Sources */,
1C73F20B14F7393600DD1DA4 /* Constants.m in Sources */,
1C73F20E14F835D500DD1DA4 /* OFHelperFunctions.m in Sources */,
- 1C8C1C8814FC9A45005B9286 /* OFImageProcHelperFunctions.m in Sources */,
- 1C9614AF1502C1B100AFFF9A /* ImageConverter.m in Sources */,
1CEF6B42150BD17D00021907 /* OFAlgorithmControlsView.m in Sources */,
- 1C71E08E15190F6900211D8A /* OFLiveVideo.m in Sources */,
+ 1C71E08E15190F6900211D8A /* OFLiveVideoHandler.m in Sources */,
1CC5B6D2151AE7370073AAED /* UIImage-Extensions.m in Sources */,
- 1C077028152A6BA4003099B3 /* ImProc_Base.c in Sources */,
- 1C077029152A6BA4003099B3 /* ImProc_Convolve.c in Sources */,
- 1C07702A152A6BA4003099B3 /* ImProc_Edges.c in Sources */,
- 1C07702B152A6BA4003099B3 /* ImProc_Filters.c in Sources */,
- 1C07702C152A6BA4003099B3 /* ImProc_Histogram.c in Sources */,
- 1C07702D152A6BA4003099B3 /* ImProc_Utils.c in Sources */,
1CA1BCE4152E80F2003AE721 /* OFAlgorithmHandler.m in Sources */,
1CA1BCE7152E9447003AE721 /* OFAlgorithmAttributes.m in Sources */,
1CA1BCEE152FADFC003AE721 /* OFAlgorithmScrollViewController.m in Sources */,
+ 1C6BE22F153E20520064D7F5 /* ImProc_Base.c in Sources */,
+ 1C6BE230153E20520064D7F5 /* ImProc_Color.c in Sources */,
+ 1C6BE231153E20520064D7F5 /* ImProc_Convolve.c in Sources */,
+ 1C6BE232153E20520064D7F5 /* ImProc_Edges.c in Sources */,
+ 1C6BE233153E20520064D7F5 /* ImProc_Effects.c in Sources */,
+ 1C6BE234153E20520064D7F5 /* ImProc_Filters.c in Sources */,
+ 1C6BE235153E20520064D7F5 /* ImProc_Histogram.c in Sources */,
+ 1C6BE236153E20520064D7F5 /* ImProc_Utils.c in Sources */,
+ 1C8AC4F8154750DF006857B7 /* ImageConverter.m in Sources */,
+ 1C73632A1548B14100DA1E46 /* OFInstructionImagesView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
View
BIN  ImgProc.xcodeproj/project.xcworkspace/xcuserdata/Jamis.xcuserdatad/UserInterfaceState.xcuserstate
Binary file not shown
View
28 ImgProc.xcodeproj/xcuserdata/Jamis.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
@@ -2,4 +2,32 @@
<Bucket
type = "1"
version = "1.0">
+ <FileBreakpoints>
+ <FileBreakpoint
+ shouldBeEnabled = "No"
+ ignoreCount = "0"
+ continueAfterRunningActions = "No"
+ filePath = "ImProc/ImProc_Effects.c"
+ timestampString = "356413771.549557"
+ startingColumnNumber = "9223372036854775807"
+ endingColumnNumber = "9223372036854775807"
+ startingLineNumber = "17"
+ endingLineNumber = "17"
+ landmarkName = "Cartoon()"
+ landmarkType = "7">
+ </FileBreakpoint>
+ <FileBreakpoint
+ shouldBeEnabled = "No"
+ ignoreCount = "0"
+ continueAfterRunningActions = "No"
+ filePath = "ImProc/ImProc_Convolve.c"
+ timestampString = "356502228.18736"
+ startingColumnNumber = "9223372036854775807"
+ endingColumnNumber = "9223372036854775807"
+ startingLineNumber = "66"
+ endingLineNumber = "66"
+ landmarkName = "convolve_in_X()"
+ landmarkType = "7">
+ </FileBreakpoint>
+ </FileBreakpoints>
</Bucket>
View
7 ImgProc.xcodeproj/xcuserdata/Jamis.xcuserdatad/xcschemes/ImgProc.xcscheme
@@ -41,7 +41,7 @@
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
@@ -58,6 +58,11 @@
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
+ <AdditionalOption
+ key = "NSZombieEnabled"
+ value = "YES"
+ isEnabled = "YES">
+ </AdditionalOption>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
View
135 ImgProc/Constants.h
@@ -8,32 +8,62 @@
#import <Foundation/Foundation.h>
-
-// SCROLLVIEW
extern const CGRect PHOTOVIEW_FRAME;
-// ALGORITHM VIEW
+// FRAMES
+// IPHONE
+// ALGORITHM-VIEW FRAMES
+extern const CGRect FRAME_ALGORITHMS_VIEW_IPHONE_SCROLL_VIEW;
+extern const CGRect FRAME_ALGORITHMS_VIEW_IPHONE_ALGORITHM_CONTROLS;
+extern const CGRect FRAME_ALGORITHMS_VIEW_IPHONE_NAV_BAR;
+// MAIN-VIEW FRAMES
+extern const CGRect FRAME_MAIN_VIEW_IPHONE_SCROLL_VIEW;
+extern const CGRect FRAME_MAIN_VIEW_IPHONE_ALGORITHM_CONTROLS;
+extern const CGRect FRAME_MAIN_VIEW_IPHONE_NAV_BAR;
+// IPAD
+// ALGORITHM-VIEW FRAMES
+extern const CGRect FRAME_ALGORITHMS_VIEW_IPAD_SCROLL_VIEW;
+extern const CGRect FRAME_ALGORITHMS_VIEW_IPAD_ALGORITHM_CONTROLS;
+extern const CGRect FRAME_ALGORITHMS_VIEW_IPAD_NAV_BAR;
+// MAIN-VIEW FRAMES
+extern const CGRect FRAME_MAIN_VIEW_IPAD_SCROLL_VIEW;
+extern const CGRect FRAME_MAIN_VIEW_IPAD_ALGORITHM_CONTROLS;
+extern const CGRect FRAME_MAIN_VIEW_IPAD_NAV_BAR;
+
+// VIEW DIMENSIONS - IPHONE
#define ALGORITHM_VIEW_HEIGHT 45.0
+#define ALGORITHM_VIEW_HEIGHT_IPAD 80.0
+#define SCROLLVIEW_HEIGHT 96.0
+#define SCROLLVIEW_HEIGHT_IPAD 174.0
+#define SCROLLVIEW_WIDTH_IPHONE 320.0
+#define SCROLLVIEW_SPACE_BETWEEN_BUTTONS 13
+#define SCROLLVIEW_SPACE_BETWEEN_BUTTONS_IPAD 20
-// SCROLLVIEW
-#define SCROLLVIEW_HEIGHT 94.0
-#define SCROLLVIEW_SPACE_BETWEEN_BUTTONS 16
+// VIEW DIMENSIONS - IPAD
// ALGORITHMS
-#define NUM_ALGORITHMS 14
+#define NUM_ALGORITHMS 18
// keeps track of what algorithm the user is in
#define ALGORITHM_NONE 0
-#define ALGORITHM_INVERT 1
-#define ALGORITHM_CONTRAST 2
-#define ALGORITHM_BRIGHTNESS 3
-#define ALGORITHM_THRESHOLD 4
-#define ALGORITHM_GAMMA 5
-#define ALGORITHM_GRADIENT_MAGNITUDE 6
-#define ALGORITHM_FAST_EDGES 7
-#define ALGORITHM_GAUSSIAN_BLUR 8
-#define ALGORITHM_FAST_SHARPEN 9
-#define ALGORITHM_DEMO 10
+#define ALGORITHM_DEMO 1
+#define ALGORITHM_INVERT 2
+#define ALGORITHM_CONTRAST 3
+#define ALGORITHM_BRIGHTNESS 4
+#define ALGORITHM_THRESHOLD 5
+#define ALGORITHM_GAMMA 6
+#define ALGORITHM_GRADIENT_MAGNITUDE 7
+#define ALGORITHM_FAST_EDGES 8
+#define ALGORITHM_SOBEL_EDGES 9
+#define ALGORITHM_GAUSSIAN_BLUR 10
+#define ALGORITHM_FAST_SHARPEN 11
+#define ALGORITHM_CARTOON 12
+#define ALGORITHM_POSTERIZE 13
+#define ALGORITHM_SKETCH 14
+#define ALGORITHM_STATIC 15
+#define ALGORITHM_ERODE 16
+#define ALGORITHM_DILATE 17
+#define ALGORITHM_NOISE_REDUCTION 18
// initial, maximum and minimum values for each algorithm
#define ALGORITHM_INIT_VAL_CONTRAST 2
@@ -51,9 +81,9 @@ extern const CGRect PHOTOVIEW_FRAME;
#define ALGORITHM_MIN_VAL_THRESHOLD 0
#define ALGORITHM_FINGER_MOVEMENT_SCALE_THRESHOLD 1.0
-#define ALGORITHM_INIT_VAL_GAMMA 3
-#define ALGORITHM_MAX_VAL_GAMMA 255
-#define ALGORITHM_MIN_VAL_GAMMA 0
+#define ALGORITHM_INIT_VAL_GAMMA 3.0
+#define ALGORITHM_MAX_VAL_GAMMA 90.0
+#define ALGORITHM_MIN_VAL_GAMMA 1.0
#define ALGORITHM_FINGER_MOVEMENT_SCALE_GAMMA 1.0
#define ALGORITHM_INIT_VAL_GRADIENT_MAGNITUDE 3.0
@@ -61,22 +91,65 @@ extern const CGRect PHOTOVIEW_FRAME;
#define ALGORITHM_MIN_VAL_GRADIENT_MAGNITUDE 0.0
#define ALGORITHM_FINGER_MOVEMENT_SCALE_GRADIENT_MAGNITUDE 1.0
-#define ALGORITHM_INIT_VAL_FAST_EDGES 125 //5
+#define ALGORITHM_INIT_VAL_FAST_EDGES 35 //5
#define ALGORITHM_MAX_VAL_FAST_EDGES 255 //23
#define ALGORITHM_MIN_VAL_FAST_EDGES 0 //1
#define ALGORITHM_FINGER_MOVEMENT_SCALE_FAST_EDGES 12.0
-#define ALGORITHM_INIT_VAL_GAUSSIAN_BLUR 4
-#define ALGORITHM_MAX_VAL_GAUSSIAN_BLUR 255
-#define ALGORITHM_MIN_VAL_GAUSSIAN_BLUR 0
+#define ALGORITHM_INIT_VAL_GAUSSIAN_BLUR 4.0
+#define ALGORITHM_MAX_VAL_GAUSSIAN_BLUR 255.0
+#define ALGORITHM_MIN_VAL_GAUSSIAN_BLUR 0.0
#define ALGORITHM_FINGER_MOVEMENT_GAUSSIAN_BLUR 1.0
/*
-#define ALGORITHM_INIT_VAL_FAST_SHARPEN 3
-#define ALGORITHM_MAX_VAL_FAST_SHARPEN 255
-#define ALGORITHM_MIN_VAL_FAST_SHARPEN 0
- #define ALGORITHM_FINGER_MOVEMENT_SCALE_FAST_SHARPEN 8.0
- */
+#define ALGORITHM_INIT_VAL_FAST_BLUR 4
+#define ALGORITHM_MAX_VAL_FAST_BLUR 255
+#define ALGORITHM_MIN_VAL_FAST_BLUR 0
+#define ALGORITHM_FINGER_MOVEMENT_FAST_BLUR 1.0
+*/
+
+#define ALGORITHM_INIT_VAL_FAST_SHARPEN 3.0
+#define ALGORITHM_MAX_VAL_FAST_SHARPEN 1.0
+#define ALGORITHM_MIN_VAL_FAST_SHARPEN 0.0
+#define ALGORITHM_FINGER_MOVEMENT_SCALE_FAST_SHARPEN 1.0
+
+#define ALGORITHM_INIT_VAL_SOBEL_EDGES 20.0
+#define ALGORITHM_MAX_VAL_SOBEL_EDGES 60.0
+#define ALGORITHM_MIN_VAL_SOBEL_EDGES 0.0
+#define ALGORITHM_FINGER_MOVEMENT_SCALE_SOBEL_EDGES 1.0
+
+#define ALGORITHM_INIT_VAL_CARTOON 21
+#define ALGORITHM_MAX_VAL_CARTOON 25
+#define ALGORITHM_MIN_VAL_CARTOON 8
+#define ALGORITHM_FINGER_MOVEMENT_SCALE_CARTOON 1.0
+
+#define ALGORITHM_INIT_VAL_POSTERIZE 5
+#define ALGORITHM_MAX_VAL_POSTERIZE 16
+#define ALGORITHM_MIN_VAL_POSTERIZE 2
+#define ALGORITHM_FINGER_MOVEMENT_SCALE_POSTERIZE 8.0
+
+#define ALGORITHM_INIT_VAL_SKETCH 15
+#define ALGORITHM_MAX_VAL_SKETCH 65
+#define ALGORITHM_MIN_VAL_SKETCH 0
+#define ALGORITHM_FINGER_MOVEMENT_SCALE_SKETCH 1.0
+
+
+/*
+#define ALGORITHM_INIT_VAL_ERODE 3
+#define ALGORITHM_MAX_VAL_ERODE 255
+#define ALGORITHM_MIN_VAL_ERODE 0
+#define ALGORITHM_FINGER_MOVEMENT_SCALE_ERODE 1.0
+
+#define ALGORITHM_INIT_VAL_DILATE 3
+#define ALGORITHM_MAX_VAL_DILATE 255
+#define ALGORITHM_MIN_VAL_DILATE 0
+#define ALGORITHM_FINGER_MOVEMENT_SCALE_DILATE 1.0
+
+#define ALGORITHM_INIT_VAL_NOISE_REDUCTION 3
+#define ALGORITHM_MAX_VAL_NOISE_REDUCTION 255
+#define ALGORITHM_MIN_VAL_NOISE_REDUCTION 0
+#define ALGORITHM_FINGER_MOVEMENT_SCALE_NOISE_REDUCTION 1.0
+*/
// LIVE VIDEO
@@ -84,4 +157,6 @@ extern const CGRect PHOTOVIEW_FRAME;
// CAMERA (PICTURES)
#define PHOTOVIEW_REAR_CAMERA_SCALE 3.0
-#define PHOTOVIEW_FRONT_CAMERA_SCALE 1.0
+#define PHOTOVIEW_FRONT_CAMERA_SCALE 1.0
+#define PHOTOVIEW_ORIGINAL_IMAGE_SCALE 1.3
+
View
51 ImgProc/Constants.m
@@ -11,3 +11,54 @@
// PHOTOVIEW
const CGRect PHOTOVIEW_FRAME = { {15.0f, 15.0f} , {290.0f, 312.0f} };
+
+
+// ANIMATION FRAMES
+
+// : IPHONE :
+// :: FRAMES, ALGORITHM-VIEW ::
+const CGRect FRAME_ALGORITHMS_VIEW_IPHONE_SCROLL_VIEW = {
+ {-320.0, 436.0-SCROLLVIEW_HEIGHT},
+ {320.0, SCROLLVIEW_HEIGHT} };
+const CGRect FRAME_ALGORITHMS_VIEW_IPHONE_ALGORITHM_CONTROLS = {
+ {0.0, 436.0-ALGORITHM_VIEW_HEIGHT},
+ {320.0, ALGORITHM_VIEW_HEIGHT} };
+const CGRect FRAME_ALGORITHMS_VIEW_IPHONE_NAV_BAR = {
+ {0.0, -44.0},
+ {320.0, 44.0} };
+// :: FRAMES, MAIN-VIEW ::
+const CGRect FRAME_MAIN_VIEW_IPHONE_SCROLL_VIEW = {
+ {0.0, 436.0-SCROLLVIEW_HEIGHT},
+ {320.0, SCROLLVIEW_HEIGHT} };
+const CGRect FRAME_MAIN_VIEW_IPHONE_ALGORITHM_CONTROLS = {
+ {0.0, 436.0},
+ {320.0, ALGORITHM_VIEW_HEIGHT} };
+const CGRect FRAME_MAIN_VIEW_IPHONE_NAV_BAR = {
+ {0.0, 0.0},
+ {320.0, 44.0} };
+
+// : IPAD :
+// :: FRAMES, ALGORITHM-VIEW ::
+const CGRect FRAME_ALGORITHMS_VIEW_IPAD_SCROLL_VIEW = {
+ {-768.0, 980.0-SCROLLVIEW_HEIGHT_IPAD},
+ {768.0, SCROLLVIEW_HEIGHT_IPAD} };
+const CGRect FRAME_ALGORITHMS_VIEW_IPAD_ALGORITHM_CONTROLS = {
+ {0.0, 980.0-ALGORITHM_VIEW_HEIGHT_IPAD},
+ {768.0, ALGORITHM_VIEW_HEIGHT_IPAD} };
+const CGRect FRAME_ALGORITHMS_VIEW_IPAD_NAV_BAR = {
+ {0.0, -44.0},
+ {768.0, 44.0} };
+// :: FRAMES, MAIN-VIEW ::
+const CGRect FRAME_MAIN_VIEW_IPAD_SCROLL_VIEW = {
+ {0.0, 980.0-SCROLLVIEW_HEIGHT_IPAD},
+ {768.0, SCROLLVIEW_HEIGHT_IPAD} };
+const CGRect FRAME_MAIN_VIEW_IPAD_ALGORITHM_CONTROLS = {
+ {0.0, 980.0},
+ {768.0, ALGORITHM_VIEW_HEIGHT_IPAD} };
+const CGRect FRAME_MAIN_VIEW_IPAD_NAV_BAR = {
+ {0.0, 0.0},
+ {768.0, 44.0} };
+
+
+//float new_y = 436.0 - ALGORITHM_VIEW_HEIGHT;
+//_algorithmControlsView.frame = CGRectMake(0.0, new_y, 320.0, ALGORITHM_VIEW_HEIGHT);
View
119 ImgProc/GraphicsCommon.h
@@ -0,0 +1,119 @@
+//
+// GraphicsCommon.h
+// ImageConversion
+//
+// Created by Paul Solt on 8/24/11.
+// Copyright 2011 Paul Solt. All rights reserved.
+//
+
+//#import <Foundation/Foundation.h>
+//
+//@interface GraphicsCommon : NSObject
+//
+//
+//@end
+
+#include <iostream>
+#include <sstream>
+
+static const int NUMBER_COLORS = 4;
+
+/** The Color3D structure is used for storing the Red, Green, Blue, and Alpha components. */
+struct Color3D {
+
+ Color3D() : red(0.0f), green(0.0f), blue(0.0f), alpha(1.0f) {}
+
+ float red;
+ float green;
+ float blue;
+ float alpha;
+}; // Color3D;
+
+/** Prints out a Color3D structure */
+static std::ostream &operator<<(std::ostream &os, const Color3D &c) {
+ os << "Color: (" << c.red << ", " << c.green << ", " << c.blue << ", " << c.alpha << ")";
+ return os;
+}
+
+static std::string toString(const Color3D &c) {
+ std::ostringstream os;
+ os << "Color: (" << c.red << ", " << c.green << ", " << c.blue << ", " << c.alpha << ")";
+ std::string str(os.str());
+ return str;
+}
+
+/** Converts a single color value from floating point space (0.0-1.0) to unsigned char (RGBA8) format.
+ Red,green,blue,alpha in 0.0-1.0 space
+ color will be in range 0-255
+ Requires 4 component (RGBA) (unsigned char *) to be already allocated
+ */
+static inline void color3dToRGBA8(Color3D *colorIn, unsigned char *colorOut) {
+
+ // Clamp the negative colors to black, it's undefined behavior otherwise.
+ Color3D newColor = *colorIn;
+ if(newColor.red < 0) {
+ newColor.red = 0;
+ }
+ if(newColor.green < 0) {
+ newColor.green = 0;
+ }
+ if(newColor.blue < 0) {
+ newColor.blue = 0;
+ }
+
+ colorOut[0] = static_cast<unsigned char>(newColor.red * 255);
+ colorOut[1] = static_cast<unsigned char>(newColor.green * 255);
+ colorOut[2] = static_cast<unsigned char>(newColor.blue * 255);
+ colorOut[3] = static_cast<unsigned char>(newColor.alpha * 255);
+}
+
+static inline void RGBA8ToColor3d(unsigned char *colorIn, Color3D *colorOut) {
+ colorOut->red = static_cast<float>(colorIn[0]) / 255.0f;
+ colorOut->green = static_cast<float>(colorIn[1]) / 255.0f;
+ colorOut->blue = static_cast<float>(colorIn[2]) / 255.0f;
+ colorOut->alpha = static_cast<float>(colorIn[3]) / 255.0f;
+}
+
+/** Converts a single color value from the colors Red, Green, Blue, Alpha in RGBA8 format to floating
+ point format in (0.0-1.0) range.
+ Requires the memory to be allocated for the colorOut parameter.
+ @param red - the red component
+ @param green - the green component
+ @param blue - the blue component
+ @param alpha - the alpha component
+ @param colorOut - the floating point Color3D structure to store the conversion
+ */
+static inline void RGBA8ToColor3d(unsigned char red, unsigned char green, unsigned char blue,
+ unsigned char alpha, Color3D *colorOut) {
+ colorOut->red = static_cast<float>(red) / 255.0f;
+ colorOut->green = static_cast<float>(green) / 255.0f;
+ colorOut->blue = static_cast<float>(blue) / 255.0f;
+ colorOut->alpha = static_cast<float>(alpha) / 255.0f;
+}
+
+/** Converts a Color3D image to RGBA8 (unsigned char *) given the image dimensions. The function
+ assumes the number of bytes per pixel color is 4. The memory should be allocated before calling this
+ method. It simply copies data from one type to the other. ImageOut should be width*height*4
+ @param imageIn - the image that should be converted
+ @param imageOut - the image that should be used for output
+ @param width - the number of pixels wide
+ @param height - the number of pixels high.
+ */
+static inline void ConvertImageColor3dToRGBA8(Color3D *imageIn, unsigned char *imageOut, int width, int height) {
+ int length = width * height;
+
+ // Need to increment unsigned char pointer by the number of colors each loop
+ for(int i = 0, j = 0; i < length; ++i, j+=NUMBER_COLORS) {
+ color3dToRGBA8(&imageIn[i], &imageOut[j]);
+ }
+
+}
+
+static inline void ConvertImageRGBA8ToColor3d(unsigned char *imageIn, Color3D *imageOut, int width, int height) {
+ int length = width * height;
+
+ // Need to increment unsigned char pointer by the number of colors each loop
+ for(int i = 0, j = 0; i < length; ++i, j+=NUMBER_COLORS) {
+ RGBA8ToColor3d(&imageIn[j], &imageOut[i]);
+ }
+}
View
38 ImgProc/ImProc_Color.h
@@ -0,0 +1,38 @@
+// ImProc_Color.h
+/*
+ * Library Organization:
+ * The library is organized in a modular fashion to allow inclusion of selected functionality.
+ * Every implementation must include ImProc_Base.h as it contains the pixel struct and all macros.
+ * Beyond that, the implementation may include only those public API headers for which it needs functionality.
+ * Because the library is broken into modular pieces the public API headers/source contain inclusions for all
+ * other library files they require for functionality. This means that the implementer should never need to
+ * include the private library headers as they are already included in the public APIs when necessary. All
+ * headers are protected by include guards to avoid multiple inclusion.
+ *
+ * Public API Functionality Breakdown:
+ * ImProc_Base: Contains all point operations for grayscale and RGB images
+ * Contains all macros required by other public API modules
+ * !! ImProc_Base MUST be included for all module implementations
+ * ImProc_Edges: Contains all edge detection functionality
+ * ImProc_Filters: Contains all spatial filter functionality
+ * ImProc_Histogram: Contains functionality for histogram calculation and equilization
+ * ImProc_Color: Contains functionality for adjusting color components in multiple spaces
+ *
+ * Note: All data structure and macro definitions are contained in ImProc_Base, ImProc_Utils, and ImProc_Convolve
+ */
+
+#ifndef COLOR_H
+#define COLOR_H
+
+#define R 0
+#define G 1
+#define B 2
+#define H 0
+#define S 1
+#define V 2
+
+#include <stdlib.h>
+#include "ImProc_Base.h"
+#include "ImProc_Utils.h"
+
+pixel* Adjust_RGB(pixel* image, int channel, int alpha, int width, int height, pixel* output);
View
31 ImgProc/ImProc_Effects.h
@@ -0,0 +1,31 @@
+// ImProc_Effects.h
+/*
+ * Library Organization:
+ * The library is organized in a modular fashion to allow inclusion of selected functionality.
+ * Every implementation must include ImProc_Base.h as it contains the pixel struct and all macros.
+ * Beyond that, the implementation may include only those public API headers for which it needs functionality.
+ * Because the library is broken into modular pieces the public API headers/source contain inclusions for all
+ * other library files they require for functionality. This means that the implementer should never need to
+ * include the private library headers as they are already included in the public APIs when necessary. All
+ * headers are protected by include guards to avoid multiple inclusion.
+ *
+ * Public API Functionality Breakdown:
+ * ImProc_Base: Contains all point operations for grayscale and RGB images
+ * Contains all macros required by other public API modules
+ * !! ImProc_Base MUST be included for all module implementations
+ * ImProc_Edges: Contains all edge detection functionality
+ * ImProc_Filters: Contains all spatial filter functionality
+ * ImProc_Histogram: Contains functionality for histogram calculation and equalization
+ *
+ * Note: All data structure and macro definitions are contained in ImProc_Base, ImProc_Utils, and ImProc_Convolve
+ */
+
+#ifndef EFFECTS_H
+#define EFFECTS_H
+
+#include "ImProc_Base.h"
+
+pixel* Cartoon(pixel* image, int lines, int colors, int width, int height, pixel* output);
+pixel* Posterize(pixel* image, int levels, int width, int height, pixel* output);
+
+#endif
View
56 ImgProc/ImageConverter.h
@@ -0,0 +1,56 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 Paul Solt, PaulSolt@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+#import <Foundation/Foundation.h>
+
+
+@interface ImageConverter : NSObject {
+
+}
+
+/** Converts a UIImage to RGBA8 bitmap.
+ @param image - a UIImage to be converted
+ @return a RGBA8 bitmap, or NULL if any memory allocation issues. Cleanup memory with free() when done.
+ */
++ (unsigned char *) convertUIImageToBitmapRGBA8:(UIImage *)image;
+
+/** A helper routine used to convert a RGBA8 to UIImage
+ @return a new context that is owned by the caller
+ */
++ (CGContextRef) newBitmapRGBA8ContextFromImage:(CGImageRef)image;
+
+
+/** Converts a RGBA8 bitmap to a UIImage.
+ @param buffer - the RGBA8 unsigned char * bitmap
+ @param width - the number of pixels wide
+ @param height - the number of pixels tall
+ @return a UIImage that is autoreleased or nil if memory allocation issues
+ */
++ (UIImage *) convertBitmapRGBA8ToUIImage:(unsigned char *)buffer
+ withWidth:(int)width
+ withHeight:(int)height;
+
+@end
+
View
222 ImgProc/ImageConverter.m
@@ -0,0 +1,222 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2011 Paul Solt, PaulSolt@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+#import "ImageConverter.h"
+
+
+@implementation ImageConverter
+
+
++ (unsigned char *) convertUIImageToBitmapRGBA8:(UIImage *) image {
+
+ CGImageRef imageRef = image.CGImage;
+
+ // Create a bitmap context to draw the uiimage into
+ CGContextRef context = [self newBitmapRGBA8ContextFromImage:imageRef];
+
+ if(!context) {
+ return NULL;
+ }
+
+ size_t width = CGImageGetWidth(imageRef);
+ size_t height = CGImageGetHeight(imageRef);
+
+ CGRect rect = CGRectMake(0, 0, width, height);
+
+ // Draw image into the context to get the raw image data
+ CGContextDrawImage(context, rect, imageRef);
+
+ // Get a pointer to the data
+ unsigned char *bitmapData = (unsigned char *)CGBitmapContextGetData(context);
+
+ // Copy the data and release the memory (return memory allocated with new)
+ size_t bytesPerRow = CGBitmapContextGetBytesPerRow(context);
+ size_t bufferLength = bytesPerRow * height;
+
+ unsigned char *newBitmap = NULL;
+
+ if(bitmapData) {
+ newBitmap = (unsigned char *)malloc(sizeof(unsigned char) * bytesPerRow * height);
+
+ if(newBitmap) { // Copy the data
+ for(int i = 0; i < bufferLength; ++i) {
+ newBitmap[i] = bitmapData[i];
+ }
+ }
+
+ free(bitmapData);
+
+ } else {
+ NSLog(@"Error getting bitmap pixel data\n");
+ }
+
+ CGContextRelease(context);
+
+ //printf("%i\n",(int)newBitmap);
+ return newBitmap;
+}
+
+
+
++ (CGContextRef) newBitmapRGBA8ContextFromImage:(CGImageRef)image
+{
+ CGContextRef context = NULL;
+ CGColorSpaceRef colorSpace;
+ uint32_t *bitmapData;
+
+ size_t bitsPerPixel = 32;
+ size_t bitsPerComponent = 8;
+ size_t bytesPerPixel = bitsPerPixel / bitsPerComponent;
+
+ size_t width = CGImageGetWidth(image);
+ size_t height = CGImageGetHeight(image);
+
+ size_t bytesPerRow = width * bytesPerPixel;
+ size_t bufferLength = bytesPerRow * height;
+
+ colorSpace = CGColorSpaceCreateDeviceRGB();
+
+ if(!colorSpace) {
+ NSLog(@"Error allocating color space RGB\n");
+ return NULL;
+ }
+
+ // Allocate memory for image data
+ bitmapData = (uint32_t *)malloc(bufferLength);
+
+ if(!bitmapData) {
+ NSLog(@"Error allocating memory for bitmap\n");
+ CGColorSpaceRelease(colorSpace);
+ return NULL;
+ }
+
+ //Create bitmap context
+ context = CGBitmapContextCreate(bitmapData,
+ width,
+ height,
+ bitsPerComponent,
+ bytesPerRow,
+ colorSpace,
+ kCGImageAlphaPremultipliedLast); // RGBA
+
+ if(!context) {
+ free(bitmapData);
+ NSLog(@"Bitmap context not created");
+ }
+
+ CGColorSpaceRelease(colorSpace);
+
+ return context;
+}
+
+
+
++ (UIImage *) convertBitmapRGBA8ToUIImage:(unsigned char *) buffer
+ withWidth:(int) width
+ withHeight:(int) height {
+
+ size_t bufferLength = width * height * 4;
+ CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, bufferLength, NULL);
+ size_t bitsPerComponent = 8;
+ size_t bitsPerPixel = 32;
+ size_t bytesPerRow = 4 * width;
+
+ CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
+ if(colorSpaceRef == NULL) {
+ NSLog(@"Error allocating color space");
+ CGDataProviderRelease(provider);
+ return nil;
+ }
+ CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;
+ CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
+
+ CGImageRef iref = CGImageCreate(width,
+ height,
+ bitsPerComponent,
+ bitsPerPixel,
+ bytesPerRow,
+ colorSpaceRef,
+ bitmapInfo,
+ provider, // data provider
+ NULL, // decode
+ YES, // should interpolate
+ renderingIntent);
+
+ uint32_t* pixels = (uint32_t*)malloc(bufferLength);
+
+ if(pixels == NULL) {
+ NSLog(@"Error: Memory not allocated for bitmap");
+ CGDataProviderRelease(provider);
+ CGColorSpaceRelease(colorSpaceRef);
+ CGImageRelease(iref);
+ return nil;
+ }
+
+ CGContextRef context = CGBitmapContextCreate(pixels,
+ width,
+ height,
+ bitsPerComponent,
+ bytesPerRow,
+ colorSpaceRef,
+ bitmapInfo);
+
+ if(context == NULL) {
+ NSLog(@"Error context not created");
+ free(pixels);
+ }
+
+ UIImage *image = nil;
+ if(context) {
+
+ CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), iref);
+
+ CGImageRef imageRef = CGBitmapContextCreateImage(context);
+
+// // Support both iPad 3.2 and iPhone 4 Retina displays with the correct scale
+// if([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)]) {
+// float scale = [[UIScreen mainScreen] scale];
+// image = [UIImage imageWithCGImage:imageRef scale:scale orientation:UIImageOrientationUp];
+// }
+// else {
+// image = [UIImage imageWithCGImage:imageRef];
+// }
+
+ image = [UIImage imageWithCGImage:imageRef];
+
+ CGImageRelease(imageRef);
+ CGContextRelease(context);
+ }
+
+ CGColorSpaceRelease(colorSpaceRef);
+ CGImageRelease(iref);
+ CGDataProviderRelease(provider);
+
+ if(pixels) {
+ free(pixels);
+ }
+ return image;
+}
+
+@end
View
8 ImgProc/ImgProc-Info.plist
@@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
- <string>${PRODUCT_NAME}</string>
+ <string>ScIP</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFiles</key>
@@ -26,10 +26,14 @@
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
+ <key>UIPrerenderedIcon</key>
+ <true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
+ <key>UIStatusBarHidden</key>
+ <true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
@@ -43,7 +47,5 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
- <key>UIStatusBarHidden</key>
- <true/>
</dict>
</plist>
View
37 ImgProc/OFAlgorithmAttributes.m
@@ -20,7 +20,6 @@ - (id)init
{
if (self = [super init])
{
- // custom code
_currentAlgorithm = ALGORITHM_NONE;
}
return self;
@@ -34,45 +33,61 @@ - (void)setCurrentAlgorithm:(int)newAlgorithm
switch (_currentAlgorithm) {
case ALGORITHM_NONE:
break;
-
case ALGORITHM_INVERT:
//_maxValue = ALGORITHM_MAX_VAL_;
//_minValue = ALGORITHM_MIN_VAL_;
break;
-
case ALGORITHM_CONTRAST:
_maxValue = ALGORITHM_MAX_VAL_CONTRAST;
_minValue = ALGORITHM_MIN_VAL_CONTRAST;
break;
-
case ALGORITHM_BRIGHTNESS:
_maxValue = ALGORITHM_MAX_VAL_BRIGHTNESS;
_minValue = ALGORITHM_MIN_VAL_BRIGHTNESS;
break;
-
case ALGORITHM_THRESHOLD:
_maxValue = ALGORITHM_MAX_VAL_THRESHOLD;
_minValue = ALGORITHM_MIN_VAL_THRESHOLD;
break;
-
case ALGORITHM_GAMMA:
_maxValue = ALGORITHM_MAX_VAL_GAMMA;
_minValue = ALGORITHM_MIN_VAL_GAMMA;
break;
-
case ALGORITHM_FAST_EDGES:
_maxValue = ALGORITHM_MAX_VAL_FAST_EDGES;
_minValue = ALGORITHM_MIN_VAL_FAST_EDGES;
break;
-
case ALGORITHM_GAUSSIAN_BLUR:
_maxValue = ALGORITHM_MAX_VAL_GAUSSIAN_BLUR;
_minValue = ALGORITHM_MIN_VAL_GAUSSIAN_BLUR;
break;
-
case ALGORITHM_FAST_SHARPEN:
- //_maxValue = ALGORITHM_MAX_VAL_FAST_EDGES;
- //_minValue = ALGORITHM_MIN_VAL_FAST_EDGES;
+ _maxValue = ALGORITHM_MAX_VAL_FAST_EDGES;
+ _minValue = ALGORITHM_MIN_VAL_FAST_EDGES;
+ break;
+ case ALGORITHM_SOBEL_EDGES:
+ _maxValue = ALGORITHM_MAX_VAL_SOBEL_EDGES;
+ _minValue = ALGORITHM_MIN_VAL_SOBEL_EDGES;
+ break;
+ case ALGORITHM_CARTOON:
+ _maxValue = ALGORITHM_MAX_VAL_CARTOON;
+ _minValue = ALGORITHM_MIN_VAL_CARTOON;
+ break;
+ case ALGORITHM_POSTERIZE:
+ _maxValue = ALGORITHM_MAX_VAL_POSTERIZE;
+ _minValue = ALGORITHM_MIN_VAL_POSTERIZE;
+ break;
+ case ALGORITHM_SKETCH:
+ _maxValue = ALGORITHM_MAX_VAL_SKETCH;
+ _minValue = ALGORITHM_MIN_VAL_SKETCH;
+ break;
+ case ALGORITHM_STATIC:
+ break;
+ case ALGORITHM_ERODE:
+ break;
+ case ALGORITHM_DILATE:
+ break;
+ case ALGORITHM_NOISE_REDUCTION:
break;
}
View
13 ImgProc/OFAlgorithmControlsView.h
@@ -14,20 +14,33 @@
@required
- (void)algorithmViewBackButtonPressed;
- (void)algorithmViewApplyChangesButtonPressed;
+- (void)algorithmViewRecordVideoButtonPressed;
+- (void)algorithmViewHelpButtonPressed;
@end
@interface OFAlgorithmControlsView : UIView {
id <OFAlgorithmControlsViewDelegate> _delegate;
UIButton *_backButton;
UIButton *_applyChangesButton;
+ UIButton *_recordVideoButton;
+ UIButton *_infoButton;
+ UIButton *_helpButton;
+ BOOL _inLiveVideoMode;
}
@property (nonatomic, retain) id<OFAlgorithmControlsViewDelegate> delegate;
@property (nonatomic, retain) UIButton *backButton;
@property (nonatomic, retain) UIButton *applyChangesButton;
+@property (nonatomic, retain) UIButton *recordVideoButton;
+@property (nonatomic, retain) UIButton *infoButton;
+@property (nonatomic, retain) UIButton *helpButton;
+@property (nonatomic) BOOL inLiveVideoMode;
- (void)backButtonPressed;
- (void)applyChangesButtonPressed;
+- (void)recordVideoButtonPressed;
+- (void)infoButtonPressed;
+- (void)helpButtonPressed;
- (void) printContentsOfFrame:(CGRect)rect withPrefixString:(NSString*)prefix;
View
99 ImgProc/OFAlgorithmControlsView.m
@@ -14,7 +14,11 @@ @implementation OFAlgorithmControlsView
@synthesize backButton = _backButton,
delegate = _delegate,
- applyChangesButton = _applyChangesButton;
+ applyChangesButton = _applyChangesButton,
+ recordVideoButton = _recordVideoButton,
+ inLiveVideoMode = _inLiveVideoMode,
+ infoButton = _infoButton,
+ helpButton = _helpButton;
- (id)initWithFrame:(CGRect)frame
{
@@ -22,27 +26,74 @@ - (id)initWithFrame:(CGRect)frame
if (self) {
self.backgroundColor = [UIColor underPageBackgroundColor];
- float b_height = 30.0;
- float b_width = 60.0;
+ float b_height;
+ float b_width;
// BACK BUTTON
_backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[_backButton setTitle:@"Back" forState:UIControlStateNormal];
- _backButton.frame = CGRectMake(10.0, (self.frame.size.height-b_height)/2.0, b_width, b_height);
[_backButton addTarget:self action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_backButton];
// APPLY CHANGES BUTTON
_applyChangesButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[_applyChangesButton setTitle:@"Apply" forState:UIControlStateNormal];
- _applyChangesButton.frame = CGRectMake((self.frame.size.width-b_width-10.0), (self.frame.size.height-b_height)/2.0, b_width, b_height);
[_applyChangesButton addTarget:self action:@selector(applyChangesButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_applyChangesButton];
+
+ // RECORD VIDEO BUTTON
+ _recordVideoButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+ [_recordVideoButton setTitle:@"Record" forState:UIControlStateNormal];
+// [_recordVideoButton setTitle:@"Stop" forState:UIControlStateDisabled];
+ [_recordVideoButton addTarget:self action:@selector(recordVideoButtonPressed) forControlEvents:UIControlEventTouchUpInside];
+// [_recordVideoButton setHidden:YES];
+ [self addSubview:_recordVideoButton];
+
+ // INFO BUTTON
+ _infoButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+ [_infoButton setTitle:@"Info" forState:UIControlStateNormal];
+ [_infoButton addTarget:self action:@selector(infoButtonPressed) forControlEvents:UIControlEventTouchUpInside];
+ [_infoButton setHidden:YES];
+ [self addSubview:_infoButton];
+
+
+ // HELP BUTTON
+ _helpButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+ [_helpButton setTitle:@"Help" forState:UIControlStateNormal];
+ [_helpButton addTarget:self action:@selector(helpButtonPressed) forControlEvents:UIControlEventTouchUpInside];
+ [self addSubview:_helpButton];
+
+
+ // set the button positions based on the device being used
+ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+ b_height = 30.0*1.5;
+ b_width = 60.0*1.5;
+
+ _backButton.frame = CGRectMake(10.0, (ALGORITHM_VIEW_HEIGHT_IPAD-b_height)/2.0, b_width, b_height);
+ _applyChangesButton.frame = CGRectMake((768.0-b_width-10.0), (ALGORITHM_VIEW_HEIGHT_IPAD-b_height)/2.0, b_width, b_height);
+ _recordVideoButton.frame = CGRectMake((768.0-b_width-10.0), (ALGORITHM_VIEW_HEIGHT_IPAD-b_height)/2.0, b_width, b_height);
+ _infoButton.frame = CGRectMake(self.center.x-b_width/2.0, (ALGORITHM_VIEW_HEIGHT_IPAD-b_height)/2.0, b_width, b_height);
+ _helpButton.frame = CGRectMake(self.center.x-b_width/2.0, (ALGORITHM_VIEW_HEIGHT_IPAD-b_height)/2.0, b_width, b_height);
+ }
+ else {
+ b_height = 30.0;
+ b_width = 60.0;
+
+ _backButton.frame = CGRectMake(10.0, (ALGORITHM_VIEW_HEIGHT-b_height)/2.0, b_width, b_height);
+ _applyChangesButton.frame = CGRectMake((320.0-b_width-10.0), (ALGORITHM_VIEW_HEIGHT-b_height)/2.0, b_width, b_height);
+ _recordVideoButton.frame = CGRectMake((320.0-b_width-10.0), (ALGORITHM_VIEW_HEIGHT-b_height)/2.0, b_width, b_height);
+ _infoButton.frame = CGRectMake(self.center.x-b_width/2.0, (ALGORITHM_VIEW_HEIGHT-b_height)/2.0, b_width, b_height);
+ _helpButton.frame = CGRectMake(self.center.x-b_width/2.0, (ALGORITHM_VIEW_HEIGHT-b_height)/2.0, b_width, b_height);
+ }
}
+
return self;
}
+
+
+#pragma mark - Buttons Pressed Methods
- (void)backButtonPressed
{
[_delegate algorithmViewBackButtonPressed];
@@ -55,8 +106,44 @@ - (void)applyChangesButtonPressed
}
-#pragma mark - helper functions
+- (void)recordVideoButtonPressed
+{
+ [_delegate algorithmViewRecordVideoButtonPressed];
+}
+
+
+- (void)infoButtonPressed
+{
+ NSLog(@"info button pressed");
+}
+
+- (void)helpButtonPressed
+{
+ [_delegate algorithmViewHelpButtonPressed];
+}
+
+
+
+#pragma mark - Getter Setter Overrides
+- (void)setInLiveVideoMode:(BOOL)inLiveVideoMode
+{
+ _inLiveVideoMode = inLiveVideoMode;
+
+ if (inLiveVideoMode) {
+ _applyChangesButton.hidden = TRUE;
+ _recordVideoButton.hidden = FALSE;
+ }
+ else {
+ _applyChangesButton.hidden = FALSE;
+ _recordVideoButton.hidden = TRUE;
+ }
+}
+
+
+
+
+#pragma mark - helper functions
// simple helper function to print the contents of a frame combined with some prefix
- (void)printContentsOfFrame:(CGRect)rect withPrefixString:(NSString*)prefix
{
View
4 ImgProc/OFAlgorithmHandler.h
@@ -27,15 +27,19 @@
double _algorithmAlphaDoublePrevious;
BOOL _liveVideoIsRunning;
+ BOOL _liveVideoIsRecording;
}
@property (nonatomic, retain) id<OFAlgorithmHandlerDelegate> delegate;
@property (nonatomic, retain) OFAlgorithmAttributes *algorithm;
@property (nonatomic) BOOL liveVideoIsRunning;
+@property (nonatomic) BOOL liveVideoIsRecording;
- (void)setCurrentAlgorithm:(int)newAlgorithm;
- (int)getCurrentAlgorithm;
+- (int)getCurrentAlpha;
- (void)processImage:(UIImage*)image;
+- (void)processPixelBuffer:(CVImageBufferRef)pixelBuffer ;
- (void)adjustAlgorithmAlpha:(float)translatedX;
- (void)finishedAdjustingAlgorithmAlpha;
- (void)setInitialAlpha;
View
406 ImgProc/OFAlgorithmHandler.m
@@ -11,13 +11,16 @@
#import "ImProc_Base.h"
#import "ImProc_Filters.h"
#import "ImProc_Edges.h"
+#import "ImProc_Effects.h"
#import "ImageConverter.h"
+#import "UIImage-Extensions.h"
@implementation OFAlgorithmHandler
@synthesize delegate = _delegate,
algorithm = _algorithm,
- liveVideoIsRunning = _liveVideoIsRunning;
+ liveVideoIsRunning = _liveVideoIsRunning,
+ liveVideoIsRecording = _liveVideoIsRecording;
static int demoImageCount = 0;
@@ -25,11 +28,11 @@ @implementation OFAlgorithmHandler
#pragma mark - Lifecycle
- (id)init
{
- NSLog(@"Algorithm handler is being init'd");
if (self = [super init])
{
// initialization code here
_algorithm = [OFAlgorithmAttributes alloc];
+ _liveVideoIsRecording = NO;
}
return self;
}
@@ -59,27 +62,101 @@ - (int)getCurrentAlgorithm
}
+- (int)getCurrentAlpha
+{
+ switch (_algorithm.currentAlgorithm) {
+ case ALGORITHM_CONTRAST:
+ return _algorithmAlphaIntCurrent;
+ case ALGORITHM_INVERT:
+ return -1.0;
+ case ALGORITHM_BRIGHTNESS:
+ return _algorithmAlphaIntCurrent;
+ case ALGORITHM_THRESHOLD:
+ return _algorithmAlphaIntCurrent;
+ case ALGORITHM_GAMMA:
+ return (int)_algorithmAlphaDoubleCurrent;
+ case ALGORITHM_GRADIENT_MAGNITUDE:
+ return -1.0;
+ case ALGORITHM_FAST_EDGES:
+ return _algorithmAlphaIntCurrent;
+ case ALGORITHM_GAUSSIAN_BLUR:
+ return -1.0;
+ case ALGORITHM_FAST_SHARPEN:
+ return -1.0;
+ case ALGORITHM_SOBEL_EDGES:
+ return _algorithmAlphaIntCurrent;
+ case ALGORITHM_CARTOON:
+ return _algorithmAlphaIntCurrent;
+ case ALGORITHM_POSTERIZE:
+ return _algorithmAlphaIntCurrent;
+ case ALGORITHM_SKETCH:
+ return _algorithmAlphaIntCurrent;
+ case ALGORITHM_STATIC:
+ return -1.0;
+ case ALGORITHM_ERODE:
+ return -1.0;
+ case ALGORITHM_DILATE:
+ return -1.0;
+ case ALGORITHM_NOISE_REDUCTION:
+ return -1.0;
+
+ default:
+ break;
+ }
+
+ return -2.0;
+}
+
+
#pragma mark - Methods
- (void)processImage:(UIImage*)image
{
// if current algorithm is DEMO algorithm, change sample pictures
- if (_algorithm.currentAlgorithm >= ALGORITHM_DEMO && !_liveVideoIsRunning) {
- if (demoImageCount == 0){
- [_delegate setOriginalImage:[UIImage imageNamed:@"flatiron.png"]];
- NSLog(@"flatiron w: %3.2f, h: %3.2f", [UIImage imageNamed:@"flatiron.png"].size.width,[UIImage imageNamed:@"flatiron.png"].size.height);
- demoImageCount = 1;
- }
+ if (_algorithm.currentAlgorithm == ALGORITHM_DEMO && !_liveVideoIsRunning)
+ {
+ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+ if (demoImageCount == 0){
+ [_delegate setOriginalImage:[UIImage imageNamed:@"jupiter.png"]];
+ demoImageCount = 1;
+ }
+ else if (demoImageCount == 1){
+ [_delegate setOriginalImage:[UIImage imageNamed:@"dog-frisbee.png"]];
+ demoImageCount = 2;
+ }
+ else if (demoImageCount == 2){
+ [_delegate setOriginalImage:[UIImage imageNamed:@"fruit.png"]];
+ demoImageCount = 3;
+ }
+ else {
+ [_delegate setOriginalImage:[UIImage imageNamed:@"toms.png"]];
+ demoImageCount = 0;
+ }
+ }
else {
- [_delegate setOriginalImage:[UIImage imageNamed:@"cassius.jpg"]];
- NSLog(@"cassius w: %3.2f, h: %3.2f", [UIImage imageNamed:@"cassius.jpg"].size.width,[UIImage imageNamed:@"cassius.jpg"].size.height);
- demoImageCount = 0;
+ if (demoImageCount == 0){
+ [_delegate setOriginalImage:[UIImage imageNamed:@"typography.png"]];
+ demoImageCount = 1;
+ }
+ else if (demoImageCount == 1){
+ [_delegate setOriginalImage:[UIImage imageNamed:@"flatiron.png"]];
+ demoImageCount = 2;
+ }
+ else {
+ [_delegate setOriginalImage:[UIImage imageNamed:@"cassius.png"]];
+ demoImageCount = 0;
+ }
}
[_algorithm setCurrentAlgorithm:ALGORITHM_NONE];
return;
+ }
+ else if (_algorithm.currentAlgorithm == ALGORITHM_DEMO && _liveVideoIsRunning) {
+ [_algorithm setCurrentAlgorithm:ALGORITHM_NONE];
+ return;
}
+
// if no algorithm, no bitmap processing necessary so short-circuit
if (_algorithm.currentAlgorithm == ALGORITHM_NONE) {
[_delegate setOriginalImage:image];
@@ -87,21 +164,28 @@ - (void)processImage:(UIImage*)image
}
// otherwise bitmap processing is necessary
+
+ // width and height need to be reversed if orientation is right or left.
+ // this is an artifact of an incorrect orientation from AVFoundation
int width = image.size.width*image.scale;
int height = image.size.height*image.scale;
+ if (image.imageOrientation == UIImageOrientationUp ||
+ image.imageOrientation == UIImageOrientationDown) {
+ width = image.size.width*image.scale;
+ height = image.size.height*image.scale;
+ } else {
+ width = image.size.height*image.scale;
+ height = image.size.width*image.scale;
+ }
-// if (image.scale == 2.0) {
-// width = width*2.0;
-// height = height*2.0;
-// }
-
- NSLog(@"process image w: %i, h: %i, orientation: %i", width, height, image.imageOrientation);
- // convert incoming image to bitmap
+ // convert image to bitmap for processing
pixel *imageBitmap = (pixel *)[ImageConverter convertUIImageToBitmapRGBA8:image];
- pixel *newBitmap = (pixel *) malloc(sizeof(pixel) * width * height);
+ //printf("%i\n",(int)imageBitmap);
+ pixel *newBitmap = pixel_copy(imageBitmap, width, height);
-// NSLog(@"new alpha: %i", _algorithmAlphaIntCurrent);
+ //NSLog(@"alpha int val %i", _algorithmAlphaIntCurrent);
+ //NSLog(@"alpha float val %3.2f", _algorithmAlphaDoubleCurrent);
switch (_algorithm.currentAlgorithm) {
case ALGORITHM_CONTRAST:
@@ -124,45 +208,255 @@ - (void)processImage:(UIImage*)image
Gradient_Magnitude(imageBitmap, _algorithmAlphaDoubleCurrent, width, height, newBitmap);
break;
case ALGORITHM_FAST_EDGES:
- //Fast_Edges(imageBitmap, _algorithmAlphaIntCurrent, width, height, newBitmap);
- //Sobel_Edges(imageBitmap, 150, _algorithmAlphaIntCurrent, width, height, newBitmap);
- Prewitt_Edges(imageBitmap, 7, 1, _algorithmAlphaIntCurrent, width, height, newBitmap);
+ Fast_Edges(imageBitmap, _algorithmAlphaIntCurrent, width, height, newBitmap);
break;
case ALGORITHM_GAUSSIAN_BLUR:
- //Gaussian_Blur(imageBitmap, 3, width, height, 0, newBitmap);
- //Fast_Blur_Color(imageBitmap, 4, width, height, newBitmap);
- Fast_Blur_Gray(imageBitmap, 4, width, height, newBitmap);
+ Gaussian_Blur(imageBitmap, 3, width, height, 0, newBitmap);
break;
case ALGORITHM_FAST_SHARPEN:
- Fast_Sharpen(imageBitmap, width, height, newBitmap);
+ //Unsharp_Masking(imageBitmap, 5.0, _algorithmAlphaDoubleCurrent, width, height, 1, newBitmap);
+ Unsharp_Masking(imageBitmap, 5.0, 0.5, width, height, 1, newBitmap);
+ break;
+ case ALGORITHM_SOBEL_EDGES:
+ Sobel_Edges(imageBitmap, 1, _algorithmAlphaIntCurrent, width, height, newBitmap);
+ break;
+ case ALGORITHM_CARTOON:
+ Cartoon(imageBitmap, _algorithmAlphaIntCurrent