// get the descriptors private static string getFontInfoDescriptorsString(bool blockLookupGenerated, OutputConfiguration outConfig, Font font) { string descriptorString = ""; // if a lookup arrays are required, point to it if (outConfig.generateLookupBlocks) { // add to string descriptorString += String.Format("\t{0}, {1} Character block lookup{2}" + outConfig.nl, blockLookupGenerated ? getCharacterDescriptorArrayLookupDisplayString(font) : "NULL", outConfig.CommentStart, outConfig.CommentEnd); // add to string descriptorString += String.Format("\t{0}, {1} Character descriptor array{2}" + outConfig.nl, blockLookupGenerated ? "NULL" : MyExtensions.GetVariableNameFromExpression(String.Format(outConfig.varNfCharInfo, getFontName(font, true))), outConfig.CommentStart, outConfig.CommentEnd); } else { // add descriptor array descriptorString += String.Format("\t{0}, {1} Character descriptor array{2}" + outConfig.nl, MyExtensions.GetVariableNameFromExpression(String.Format(outConfig.varNfCharInfo, getFontName(font, true))), outConfig.CommentStart, outConfig.CommentEnd); } // return the string return(descriptorString); }
// get character descriptor array block name private string charDescArrayGetBlockName(int currentBlockIndex, bool includeTypeDefinition, bool includeBlockIndex) { // get block id string blockIdString = String.Format("Block{0}", currentBlockIndex); // variable name string variableName = String.Format(OutConfig.varNfCharInfo, getFontName(Font, true)); // remove type unless required if (!includeTypeDefinition) { variableName = MyExtensions.GetVariableNameFromExpression(variableName); } // return the block name return(String.Format("{0}{1}{2}", variableName, includeBlockIndex ? blockIdString : "", includeTypeDefinition ? "[]" : "")); }
private void generateOutputForFontImage(OutputConfiguration outConfig, Dictionary <Color, bool> colorList, Size tileSize, int codepage, Bitmap bitmapOriginal, StringBuilder textSource, StringBuilder textHeader) { // the name of the bitmap string imageName; Color[] backgroundColors; BitmapInfo bi; textSource.Clear(); textHeader.Clear(); if (bitmapOriginal == null || txtImageName.Text == "") { textSource.Append("No image found "); return; } imageName = MyExtensions.ScrubVariableName(txtImageName.Text); backgroundColors = MyExtensions.GetEnabledKeys <Color>(colorList); // check if bitmap is assigned if (m_currentLoadedBitmap != null) { // // Bitmap manipulation // bi = new BitmapInfo(m_outputConfig, m_currentLoadedBitmap, colorList); // try to manipulate the bitmap if (!bi.GenerateManipulatetBitmap(bi.OriginalBorder)) { // show error MessageBox.Show("No blackground pixels found in bitmap", "Can't convert bitmap", MessageBoxButtons.OK, MessageBoxIcon.Error); // stop here, failed to manipulate the bitmap for whatever reason return; } // according to config if (m_outputConfig.addCommentVariableName) { // add source file header textSource.AppendFormat("{0}" + m_outputConfig.nl + "{1} Image data for {2}" + m_outputConfig.nl + "{3}" + m_outputConfig.nl + m_outputConfig.nl, m_outputConfig.CommentStart, m_outputConfig.CommentBlockMiddle, imageName, m_outputConfig.CommentBlockEnd); // add header file header textHeader.AppendFormat("{0}Bitmap info for {1}{2}" + m_outputConfig.nl, m_outputConfig.CommentStart, imageName, m_outputConfig.CommentEnd); } // bitmap varname string bitmapVarName = String.Format(m_outputConfig.varNfImageBitmap, imageName) + "[]"; // add to source textSource.AppendFormat("{0} =" + m_outputConfig.nl + "{{" + m_outputConfig.nl, bitmapVarName); // // Bitmap to string // // page array bi.GeneratePageArray(); // assign pages for fully populated 8 bits int pagesPerRow = MyExtensions.ConvertValueByDescriptorFormat(OutputConfiguration.DescriptorFormat.DisplayInBytes, bi.BitmapToGenerate.Width); // now convert to string bi.GenerateCharacterDataDescriptorAndVisulazer(); textSource.Append(bi.Descriptor); // close textSource.AppendFormat("}};" + m_outputConfig.nl + m_outputConfig.nl); // according to config if (m_outputConfig.addCommentVariableName) { // set sizes comment textSource.AppendFormat("{0}Bitmap sizes for {1}{2}" + m_outputConfig.nl, m_outputConfig.CommentStart, imageName, m_outputConfig.CommentEnd); } Func <string> getImageWidthString = () => { const string format = "\t{2}, {0} {3}{1}{4}"; // display width in bytes? switch (m_outputConfig.descImgWidth) { case OutputConfiguration.DescriptorFormat.DisplayInBytes: return(string.Format(format, m_outputConfig.CommentStart, m_outputConfig.CommentEnd, pagesPerRow, "Image width in bytes (pages)", m_outputConfig.nl)); case OutputConfiguration.DescriptorFormat.DisplayInBits: return(string.Format(format, m_outputConfig.CommentStart, m_outputConfig.CommentEnd, bi.BitmapToGenerate.Width, "Image width in pixels", m_outputConfig.nl)); case OutputConfiguration.DescriptorFormat.DontDisplay: return(""); default: throw new NotImplementedException(); } }; Func <string> getImageHeigtString = () => { const string format = "\t{2}, {0} {3}{1}{4}"; switch (m_outputConfig.descImgHeight) { case OutputConfiguration.DescriptorFormat.DisplayInBytes: return(string.Format(format, m_outputConfig.CommentStart, m_outputConfig.CommentEnd, MyExtensions.ConvertValueByDescriptorFormat(OutputConfiguration.DescriptorFormat.DisplayInBytes, bi.BitmapToGenerate.Height), "Image height in bytes (pages)", m_outputConfig.nl)); case OutputConfiguration.DescriptorFormat.DisplayInBits: return(string.Format(format, m_outputConfig.CommentStart, m_outputConfig.CommentEnd, bi.BitmapToGenerate.Height, "Image height in pixels", m_outputConfig.nl)); case OutputConfiguration.DescriptorFormat.DontDisplay: return(""); default: throw new NotImplementedException(); } }; // get var name string imageInfoVarName = String.Format(m_outputConfig.varNfImageInfo, imageName); // image info header textHeader.AppendFormat("extern {0};" + m_outputConfig.nl, imageInfoVarName); // image info source textSource.AppendFormat("{2} =" + m_outputConfig.nl + "{{" + m_outputConfig.nl + "{3}" + "{4}" + "\t{5}, {0} Image bitmap array{1}" + m_outputConfig.nl + "}};" + m_outputConfig.nl, m_outputConfig.CommentStart, m_outputConfig.CommentEnd, imageInfoVarName, getImageWidthString(), getImageHeigtString(), MyExtensions.GetVariableNameFromExpression(bitmapVarName)); } }
// generate the strings private void GenerateStringsFromFontInfo() { StringBuilder sourceText = new StringBuilder(); StringBuilder headerText = new StringBuilder(); if (OutConfig.addCommentVariableName) { // add source file header sourceText.AppendFormat("{0}" + OutConfig.nl + "{1} Font data for {2}" + OutConfig.nl + "{3}" + OutConfig.nl + OutConfig.nl, OutConfig.CommentStart, OutConfig.CommentBlockMiddle, getFontName(Font, false), OutConfig.CommentBlockEnd); // add source header sourceText.AppendFormat("{0}Character bitmaps for {1} {2}" + OutConfig.nl, OutConfig.CommentStart, getFontName(Font, false), OutConfig.CommentEnd); // add header file header headerText.AppendFormat("{0}Font data for {1} {2}" + OutConfig.nl, OutConfig.CommentStart, getFontName(Font, false), OutConfig.CommentEnd); } // get bitmap name string charBitmapVarName = String.Format(OutConfig.varNfBitmaps, getFontName(Font, true)) + "[]"; // source var sourceText.AppendFormat("{0} = " + OutConfig.nl + "{{" + OutConfig.nl, charBitmapVarName); Characters.ToList().ForEach(chi => chi.GenerateCharacterDataDescriptorAndVisulazer()); Characters.Aggregate(sourceText, (sb, chi) => { // skip empty bitmaps if (chi.BitmapToGenerate == null) { return(sb); } // now add letter array sourceText.Append(chi.Descriptor); // space out if (OutConfig.addCommentCharDescriptor && chi.Character != chi.ParentFontInfo.LastChar) { // space between chars sb.Append(OutConfig.nl); } return(sb); }); // space out sourceText.Append("};" + OutConfig.nl + OutConfig.nl); // // Charater descriptor // // whether or not block lookup was generated bool blockLookupGenerated = false; // check if required by configuration if (OutConfig.generateLookupArray) { // generate the lookup array blockLookupGenerated = generateStringsFromCharacterDescriptorBlockList(sourceText, headerText); } // // Font descriptor // // according to config if (OutConfig.addCommentVariableName) { // result string sourceText.AppendFormat("{0}Font information for {1} {2}" + OutConfig.nl, OutConfig.CommentStart, getFontName(Font, false), OutConfig.CommentEnd); } // character name string fontInfoVarName = String.Format(OutConfig.varNfFontInfo, getFontName(Font, true)); // add character array for header headerText.AppendFormat("extern {0};" + OutConfig.nl, fontInfoVarName); // the font character height string fontCharHeightString = ""; // get character height sstring - displayed according to output configuration if (OutConfig.descFontHeight != OutputConfiguration.DescriptorFormat.DontDisplay) { // convert the value fontCharHeightString = String.Format("\t{0}, {1} Character height{2}" + OutConfig.nl, MyExtensions.ConvertValueByDescriptorFormat(OutConfig.descFontHeight, FixedAbsolutCharHeight), OutConfig.CommentStart, OutConfig.CommentEnd); } string fontCodePage = ""; if (OutConfig.addCodePage) { fontCodePage = string.Format("\t{0}, {1} CodePage {3}{2}" + OutConfig.nl, OutConfig.CodePage, OutConfig.CommentStart, OutConfig.CommentEnd, CodePageInfo.GetCodepageName(OutConfig.CodePage)); } string spaceCharacterPixelWidthString = ""; // get space char width, if it is up to driver to generate if (!OutConfig.generateSpaceCharacterBitmap) { // convert the value spaceCharacterPixelWidthString = String.Format("\t{0}, {1} Width, in pixels, of space character{2}" + OutConfig.nl, OutConfig.spaceGenerationPixels, OutConfig.CommentStart, OutConfig.CommentEnd); } // font info sourceText.AppendFormat("{2} =" + OutConfig.nl + "{{" + OutConfig.nl + "{3}" + "\t{4}, {0} First character '{9}'{1}" + OutConfig.nl + "\t{5}, {0} Last character '{10}'{1}" + OutConfig.nl + "{6}" + "{7}" + "\t{8}, {0} Character bitmap array{1}" + OutConfig.nl + "{11}" + "}};" + OutConfig.nl, OutConfig.CommentStart, OutConfig.CommentEnd, fontInfoVarName, fontCharHeightString, getCharacterDisplayString(CodePageInfo, FirstChar), getCharacterDisplayString(CodePageInfo, LastChar), spaceCharacterPixelWidthString, getFontInfoDescriptorsString(blockLookupGenerated, OutConfig, Font), MyExtensions.GetVariableNameFromExpression(String.Format(OutConfig.varNfBitmaps, getFontName(Font, true))), FirstChar, LastChar, fontCodePage); // add the appropriate entity to the header if (blockLookupGenerated) { // add block lookup to header headerText.AppendFormat("extern const FONT_CHAR_INFO_LOOKUP {0}[];" + OutConfig.nl, getCharacterDescriptorArrayLookupDisplayString(Font)); } else { // add block lookup to header headerText.AppendFormat("extern {0}[];" + OutConfig.nl, String.Format(OutConfig.varNfCharInfo, getFontName(Font, true))); } TextSource = sourceText.ToString(); TextHeader = headerText.ToString(); }