private void ProcessImage(byte[] aBuffer, TransportClassImgUrl oTransportClassImgUrl)
    {
        TransportClassMediaXml oTransportClassMediaXml = oTransportClassImgUrl.m_oTransportClassMediaXml;
        int nImageFormat = FormatChecker.GetFileFormat(aBuffer);
        if ((0 != (FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE & nImageFormat) || FileFormats.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG == nImageFormat) && -1 != oTransportClassImgUrl.m_sSupportedFormats.IndexOf(FileFormats.ToString(nImageFormat)))
        {
            if (FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_GIF == nImageFormat || FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_ICO == nImageFormat)
            {
                byte[] aNewBuffer;
                if (Utils.ConvertGifIcoToPng(aBuffer, nImageFormat, out aNewBuffer))
                {
                    nImageFormat = FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_PNG;
                    aBuffer = aNewBuffer;
                }
            }
            MemoryStream ms = new MemoryStream(aBuffer);
            string sHash = Utils.getMD5HexString(ms);
            string sExistFilename;
            if (oTransportClassMediaXml.m_aMediaXmlMapHash.TryGetValue(sHash, out sExistFilename))
            {

                oTransportClassImgUrl.SetUrl(Constants.mc_sResourceServiceUrlRel + oTransportClassMediaXml.m_oInputCommand.id + "/media/" + sExistFilename);
                oTransportClassImgUrl.SetErrorAndCallback(ErrorTypes.NoError);
            }
            else
            {
                string ext = "." + FileFormats.ToString(nImageFormat);
                string sNewName;
                if(false == oTransportClassImgUrl.m_mapUrlToName.TryGetValue(oTransportClassImgUrl.m_sCurUrl, out sNewName))
                {
                    
                    string sSearchName = "image";
                    List<int> aIndexes = new List<int>();
                    foreach (KeyValuePair<string, string> kvp in oTransportClassMediaXml.m_aMediaXmlMapFilename)
                    {
                        string sFilename = Path.GetFileNameWithoutExtension(kvp.Key);
                        if (0 == sFilename.IndexOf(sSearchName))
                        {
                            int nCurIndex;
                            if (int.TryParse(sFilename.Substring(sSearchName.Length), out nCurIndex))
                                aIndexes.Add(nCurIndex);
                        }
                    }
                    int nMaxIndex = -1;
                    for (int i = 0, length = aIndexes.Count; i < length; ++i)
                    {
                        int nCurIndex = aIndexes[i];
                        if (nMaxIndex < nCurIndex)
                            nMaxIndex = nCurIndex;
                    }
                    int nNewIndex = 1;
                    if (nMaxIndex >= nNewIndex)
                        nNewIndex = nMaxIndex + 1;
                    sNewName = sSearchName + nNewIndex + ext;
                }
                if (FileFormats.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG == nImageFormat)
                {
                    
                    string sCurUrl = oTransportClassImgUrl.m_sCurUrl;
                    int nExtIndex = sCurUrl.LastIndexOf(".svg");
                    if (-1 != nExtIndex)
                    {
                        string sStart = sCurUrl.Substring(0, nExtIndex);
                        string sEmfUrl = sStart + ".emf";
                        string sWmfUrl = sStart + ".wmf";
                        oTransportClassImgUrl.AddUrls(new string[] { sEmfUrl, sWmfUrl });
                        oTransportClassImgUrl.m_mapUrlToName[sEmfUrl] = Path.ChangeExtension(sNewName, ".emf");
                        oTransportClassImgUrl.m_mapUrlToName[sWmfUrl] = Path.ChangeExtension(sNewName, ".wmf");
                    }
                }
                oTransportClassMediaXml.m_aMediaXmlMapHash.Add(sHash, sNewName);
                oTransportClassMediaXml.m_aMediaXmlMapFilename.Add(sNewName, sHash);
                oTransportClassMediaXml.m_oStorage = new Storage();
                oTransportClassMediaXml.m_oMemoryStream = ms;
                oTransportClassMediaXml.m_oParam = sNewName;
                ms.Position = 0;
                InputCommand cmd = oTransportClassMediaXml.m_oInputCommand;
                oTransportClassMediaXml.m_oStorage.WriteFileBegin(Path.Combine(cmd.id, @"media\" + sNewName), ms, WriteFileCallback, oTransportClassImgUrl);
            }
        }
        else
            oTransportClassImgUrl.SetErrorAndCallback(ErrorTypes.UploadExtension);
    }