[gdal-dev] Extract CGM from a NITF file

Livneh Yehiyam yehil at rafael.co.il
Wed Jun 19 22:12:26 PDT 2013


Hi
You can use the GDAL unescape function like this:

/// <summary>
        /// Remove "backslash quotable" escape characters from the string and convert it to byte array.
        /// </summary>
        public static byte[] RemoveEscapeCharacters(this string value)
        {
            if(String.IsNullOrEmpty(value))
            {
                return new byte[0];
            }
            int length = value.Length;
            IntPtr escapedString = CPLUnescapeString(value, ref length, 0);
            byte[] escapedBytes = new byte[length];
            Marshal.Copy(escapedString, escapedBytes, 0, length);
            VSIFree(escapedString);
            return escapedBytes;
        }

        [DllImport("gdal18.dll", EntryPoint = "CPLUnescapeString", CallingConvention = CallingConvention.Cdecl)]
        private static extern IntPtr CPLUnescapeString(string input, ref int length, int scheme);

        [DllImport("gdal18.dll", EntryPoint = "VSIFree", CallingConvention = CallingConvention.Cdecl)]
        private static extern void VSIFree(IntPtr input);


Yehiyam


From: gdal-dev-bounces at lists.osgeo.org [mailto:gdal-dev-bounces at lists.osgeo.org] On Behalf Of xavier lhomme
Sent: Wednesday, June 19, 2013 11:50 PM
To: gdal-dev
Subject: [gdal-dev] Extract CGM from a NITF file

Hi

  I'm trying to extract CGM files from a NITF but the CGM are corrupt.

  First I Unescape the CGM Data and I obtain something like
   "\0,\vCreated CGM \"\0 f\0 ÿÿ\0 ...
  Then write the text file.

  I compared this string with a CGM obtained from NITRO NITF (nitro_extract_cgm.exe).
  The new CGM file start with
    "\0,\vCreated CGM \"\0 f\0 ��\0
 I succeed to read this CGM file with a CGM viewer.

One of the difference come from caracter like ÿ (from GDAL) � from NITRO

Then It's probably something I missed in the Escaping/Unescaping function

Because UnescapeScring wasn't exposed in C# I wrote a function :
static public string UnescapeString(string pszInput)
        {
             string pszOutput="";
            int iIn = 0;
            for (iIn = 0; iIn<pszInput.Length; iIn++)
            {
                if (pszInput[iIn] == '\\')
                {
                    iIn++;
                    if (pszInput[iIn] == 'n')
                        pszOutput += '\n';
                    else if (pszInput[iIn] == '0')
                        pszOutput += '\0';
                    else
                        pszOutput += pszInput[iIn];
                }
                else
                {
                    pszOutput += pszInput[iIn];
                }
            }
            return pszOutput;
        }

thanks in advance!
Best regards

________________________________________

This message (including any attachments) issued by RAFAEL- ADVANCED DEFENSE SYSTEMS LTD. (hereinafter "RAFAEL") contains confidential information intended for a specific individual and purpose, may constitute information that is privileged or confidential or otherwise protected from disclosure. If you are not the intended recipient, you should contact us immediately and thereafter delete this message from your system. You are hereby notified that any disclosure, copying, dissemination, distribution or forwarding of this message, or the taking of any action based on it, is strictly prohibited. If you have received this e-mail in error, please notify us immediately by e-mail mailto:lawraf at rafael.co.il and completely delete or destroy any and all electronic or other copies of the original message and any attachments thereof.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130620/e6a3126c/attachment-0001.html>


More information about the gdal-dev mailing list