diff Core/Images/ImageProcessing.cpp @ 1993:e2a3ff770b48

introducing float32 images
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sat, 14 May 2016 13:41:42 +0200
parents 9161e3ef0d17
children 4d099fee5eca
line wrap: on
line diff
--- a/Core/Images/ImageProcessing.cpp	Mon May 09 17:56:32 2016 +0200
+++ b/Core/Images/ImageProcessing.cpp	Sat May 14 13:41:42 2016 +0200
@@ -75,9 +75,26 @@
   }
 
 
+  template <typename SourceType>
+  static void ConvertGrayscaleToFloat(ImageAccessor& target,
+                                      const ImageAccessor& source)
+  {
+    for (unsigned int y = 0; y < source.GetHeight(); y++)
+    {
+      float* t = reinterpret_cast<float*>(target.GetRow(y));
+      const SourceType* s = reinterpret_cast<const SourceType*>(source.GetConstRow(y));
+
+      for (unsigned int x = 0; x < source.GetWidth(); x++, t++, s++)
+      {
+        *t = static_cast<float>(*s);
+      }
+    }
+  }
+
+
   template <typename TargetType>
   static void ConvertColorToGrayscale(ImageAccessor& target,
-                              const ImageAccessor& source)
+                                      const ImageAccessor& source)
   {
     assert(source.GetFormat() == PixelFormat_RGB24);
 
@@ -378,6 +395,27 @@
       return;
     }
 
+    if (target.GetFormat() == PixelFormat_Float32 &&
+        source.GetFormat() == PixelFormat_Grayscale8)
+    {
+      ConvertGrayscaleToFloat<uint8_t>(target, source);
+      return;
+    }
+
+    if (target.GetFormat() == PixelFormat_Float32 &&
+        source.GetFormat() == PixelFormat_Grayscale16)
+    {
+      ConvertGrayscaleToFloat<uint16_t>(target, source);
+      return;
+    }
+
+    if (target.GetFormat() == PixelFormat_Float32 &&
+        source.GetFormat() == PixelFormat_SignedGrayscale16)
+    {
+      ConvertGrayscaleToFloat<int16_t>(target, source);
+      return;
+    }
+
     if (target.GetFormat() == PixelFormat_Grayscale8 &&
         source.GetFormat() == PixelFormat_RGBA32)
     {