Ajout de l'ensemble du workspace.
[GPU.git] / WCudaMSE / BilatTools_Cuda / src / core / cudatools / header / device / ColorTools_GPU.h
diff --git a/WCudaMSE/BilatTools_Cuda/src/core/cudatools/header/device/ColorTools_GPU.h b/WCudaMSE/BilatTools_Cuda/src/core/cudatools/header/device/ColorTools_GPU.h
new file mode 100755 (executable)
index 0000000..76fbfc6
--- /dev/null
@@ -0,0 +1,144 @@
+#ifndef COLOR_TOOL_GPU_H\r
+#define COLOR_TOOL_GPU_H\r
+\r
+#include "both_define.h"\r
+#include "builtin_types.h" // pour float3\r
+\r
+\r
+// TODO cuda ameliorer\r
+\r
+namespace gpu\r
+    {\r
+\r
+    class ColorTools\r
+       {\r
+           /*--------------------------------------*\\r
+          |*             HSB_TO_RVB            *|\r
+            \*-------------------------------------*/\r
+\r
+           /*--------------------------------------*\\r
+          |*           public                      *|\r
+            \*-------------------------------------*/\r
+\r
+       public:\r
+\r
+           /**\r
+            * Convertir une couleur HSB en RGB !\r
+            * H,S,B in [0,1]\r
+            * R,G,B in [0,255]\r
+            */\r
+           __BOTH__\r
+           static void HSB_TO_RVB(const float3& hsb01, uchar4* ptrRVBA)\r
+               {\r
+               ColorTools::HSB_TO_RVB(hsb01.x, hsb01.y, hsb01.z, &ptrRVBA->x, &ptrRVBA->y, &ptrRVBA->z);\r
+               }\r
+\r
+           /**\r
+            * Convertir une couleur HSB en RGB !\r
+            * H,S,B in [0,1]\r
+            * R,G,B in [0,255]\r
+            */\r
+           __BOTH__\r
+           static void HSB_TO_RVB(float h01, uchar4* ptrRVBA)\r
+               {\r
+               ColorTools::HSB_TO_RVB(h01, 1.0f, 1.0f, &ptrRVBA->x, &ptrRVBA->y, &ptrRVBA->z);\r
+               }\r
+\r
+           /**\r
+            * Convertir une couleur HSB en RGB !\r
+            * H,S,B in [0,1]\r
+            * R,G,B in [0,255]\r
+            */\r
+           __BOTH__\r
+           static void HSB_TO_RVB(float h01, float s01, float b01, uchar4* ptrRVBA)\r
+               {\r
+               ColorTools::HSB_TO_RVB(h01, s01, b01, &ptrRVBA->x, &ptrRVBA->y, &ptrRVBA->z);\r
+               }\r
+\r
+           /**\r
+            * Convertir une couleur HSB en RGB !\r
+            * H,S,B in [0,1]\r
+            * R,G,B in [0,255]\r
+            */\r
+           __BOTH__\r
+           static void HSB_TO_RVB(float H, float S, float V, unsigned char *ptrR, unsigned char *ptrG, unsigned char *ptrB)\r
+               {\r
+               //float H = profondeur / 255.0;\r
+               //float S = 1;\r
+               //float V = 1;\r
+               if (S == 0) //HSV from 0 to 1\r
+                   {\r
+                   *ptrR = V * 255;\r
+                   *ptrG = V * 255;\r
+                   *ptrB = V * 255;\r
+                   }\r
+               else\r
+                   {\r
+                   float var_h = H * 6;\r
+                   if (var_h == 6)\r
+                       {\r
+                       var_h = 0;\r
+                       } //H must be < 1\r
+\r
+                   unsigned char var_i = (unsigned char) var_h; //Or ... var_i = floor( var_h )\r
+\r
+                   float var_1 = V * (1 - S);\r
+                   float var_2 = V * (1 - S * (var_h - var_i));\r
+                   float var_3 = V * (1 - S * (1 - (var_h - var_i)));\r
+\r
+                   float var_r, var_g, var_b;\r
+                   if (var_i == 0)\r
+                       {\r
+                       var_r = V;\r
+                       var_g = var_3;\r
+                       var_b = var_1;\r
+                       }\r
+                   else if (var_i == 1)\r
+                       {\r
+                       var_r = var_2;\r
+                       var_g = V;\r
+                       var_b = var_1;\r
+                       }\r
+                   else if (var_i == 2)\r
+                       {\r
+                       var_r = var_1;\r
+                       var_g = V;\r
+                       var_b = var_3;\r
+                       }\r
+                   else if (var_i == 3)\r
+                       {\r
+                       var_r = var_1;\r
+                       var_g = var_2;\r
+                       var_b = V;\r
+                       }\r
+                   else if (var_i == 4)\r
+                       {\r
+                       var_r = var_3;\r
+                       var_g = var_1;\r
+                       var_b = V;\r
+                       }\r
+                   else\r
+                       {\r
+                       var_r = V;\r
+                       var_g = var_1;\r
+                       var_b = var_2;\r
+                       }\r
+\r
+                   //RGB results from 0 to 255\r
+                   *ptrR = (unsigned char) (var_r * 255);\r
+                   *ptrG = (unsigned char) (var_g * 255);\r
+                   *ptrB = (unsigned char) (var_b * 255);\r
+                   }\r
+               }\r
+\r
+           /*--------------------------------------*\\r
+           |*          private                     *|\r
+            \*-------------------------------------*/\r
+\r
+       };\r
+    }\r
+#endif\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    End                                             *|\r
+ \*---------------------------------------------------------------------*/\r