[mapguide-commits] r1346 - trunk/MgDev/Common/Stylization

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Mar 22 14:16:43 EDT 2007


Author: traianstanev
Date: 2007-03-22 14:16:41 -0400 (Thu, 22 Mar 2007)
New Revision: 1346

Modified:
   trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp
   trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h
   trunk/MgDev/Common/Stylization/Stylization.h
Log:
Added support for storing image elements inlined as base64 inside symbol definitions.

Modified: trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp	2007-03-22 09:55:25 UTC (rev 1345)
+++ trunk/MgDev/Common/Stylization/SE_StyleVisitor.cpp	2007-03-22 18:16:41 UTC (rev 1346)
@@ -460,15 +460,29 @@
 
     if (image.GetContent().size())
     {
-        /* Handle this; Base64 as MdfString is not a particularly inspired plan */
-        primitive->pngPtr = NULL;
+        const MdfModel::MdfString& src_u = image.GetContent();
+        
+        size_t srclen = src_u.size();
+        char* src_ascii = new char[srclen];
+
+        char* ptr = src_ascii;
+        for (int i=0; i<srclen; i++)
+            *ptr++ = (char)src_u[i];
+                
+        size_t dstlen = Base64::GetDecodedLength(image.GetContent().size());
+        primitive->pngPtr = new unsigned char[dstlen];
+        primitive->ownPtr = true;
+
+        Base64::Decode((unsigned char*)primitive->pngPtr, src_ascii, srclen);
+                
+        delete [] src_ascii;
     }
     else
     {
         ParseStringExpression(image.GetReference(), primitive->pngPath);
 
         if (primitive->pngPath.expression == NULL) // constant path
-            primitive->pngPtr = m_resources? m_resources->GetImageData(primitive->resId, primitive->pngPath.value, primitive->pngSize) : NULL;
+            primitive->pngPtr = (unsigned char*)(m_resources? m_resources->GetImageData(primitive->resId, primitive->pngPath.value, primitive->pngSize) : NULL);
         else
             primitive->pngPtr = NULL;
     }

Modified: trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h
===================================================================
--- trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h	2007-03-22 09:55:25 UTC (rev 1345)
+++ trunk/MgDev/Common/Stylization/SE_SymbolDefProxies.h	2007-03-22 18:16:41 UTC (rev 1346)
@@ -111,13 +111,15 @@
 {
     SE_String pngPath;
     const wchar_t* resId;
-    const unsigned char* pngPtr;
+    unsigned char* pngPtr;
+    bool ownPtr;
     int pngSize;
     SE_Double position[2];
     SE_Double extent[2];
     SE_Double angle;
 
-    SE_INLINE SE_Raster() {  }
+    SE_INLINE SE_Raster() : ownPtr(false) {  }
+    ~SE_Raster() { if (ownPtr) delete[] pngPtr; }
     virtual SE_RenderPrimitive* evaluate(SE_EvalContext*);
 };
 

Modified: trunk/MgDev/Common/Stylization/Stylization.h
===================================================================
--- trunk/MgDev/Common/Stylization/Stylization.h	2007-03-22 09:55:25 UTC (rev 1345)
+++ trunk/MgDev/Common/Stylization/Stylization.h	2007-03-22 18:16:41 UTC (rev 1346)
@@ -81,6 +81,7 @@
 #include "Text.h"
 #include "Image.h"
 #include "GraphicElement.h"
+#include "Base64.h"
 
 //FDO headers
 #include "Fdo.h"



More information about the mapguide-commits mailing list