Hi: What is the best way to convert a string to the unicode numbers in order to create a string of them so you can place them into the
GlyphIndices property of a glyphrun?
Here is the method I will be using it in.
public static XElement DrawingTextXml(string userText, int userThickness, SolidColorBrush userColor) { //string for color String strColor = userColor.ToString(); //convert user text to unicode numbers String convertedIndices = ConvertTextToIndices(userText); //glyph indices //String indices = "43 72 79 79 82 3 58 82 85 79 71"; //base line origin String baseLine = "0,12.29"; // font rendering EM size String emSize = "13.333333333333334"; //device font name String dfName = "{x:Null}"; //advanced widths String advancedWidths = "9.62666666666667 7.41333333333333 2.96 2.96 7.41333333333333 3.70666666666667 12.5866666666667 7.41333333333333 4.44 2.96 7.41333333333333"; //BidiLevel String bidiLevel = "0"; //font URI String fontURI = @"C:\WINDOWS\Fonts\TIMES.TTF"; XElement myXml = new XElement(rootNS + "GlyphRunDrawing", new XAttribute("ForegroundBrush", strColor), new XElement(rootNS + "GlyphRunDrawing.GlyphRun", new XElement(rootNS + "GlyphRun", new XAttribute("CaretStops", "{x:Null}"), new XAttribute("ClusterMap", "{x:Null}"), new XAttribute("IsSideways", "False"), new XAttribute("GlyphOffsets", "{x:Null}"), new XAttribute("GlyphIndices", convertedIndices), new XAttribute("BaselineOrigin", baseLine), new XAttribute("FontRenderingEmSize", emSize), new XAttribute("DeviceFontName", dfName), new XAttribute("AdvanceWidths", advancedWidths), new XAttribute("BidiLevel", bidiLevel), new XElement(rootNS + "GlyphRun.GlyphTypeface", new XElement(rootNS + "GlyphTypeface", new XAttribute("FontUri", fontURI)))))); return myXml; }
This is the method I am trying to create.
private static String ConvertTextToIndices(String userText) { String outputString; Encoding unicode = Encoding.Unicode; Double charNumber; StringBuilder myIndiceString = new StringBuilder(userText.Length+1); myIndiceString.Length = userText.Length; //char myChar; //SByte[] arrayUniChar = new SByte[userText.Length+1]; try { // Convert the string into a byte array. //byte[] unicodeBytes = unicode.GetBytes(userText); char[] charNumArray; // Convert the new byte[] into a char[] and then into a string. //create the char array //char[] unicodeChars = new char[unicode.GetCharCount(unicodeBytes, 0, unicodeBytes.Length)]; //put the string into the char array // unicode.GetChars(unicodeBytes, 0, unicodeBytes.Length, unicodeChars, 0); //convert each char numeric value to a string and add it to the output string for (int charIndex = 0; charIndex < userText.Length; charIndex++) { charNumber = char.GetNumericValue(userText, charIndex); charNumArray[charIndex] = Convert.ToChar(charNumber); } // string unicodeString = new string(unicodeChars); // return unicodeString; }
Mike Gallinger C.Tech. Cutting Edge Computing Software Developer