Exemplo n.º 1
0
        public string GetBlockInfo()
        {
            Size s = bitmapInfo?.Size ?? new Size();

            // get the character descriptor string
            Func <OutputConfiguration.DescriptorFormat, int, string> GetCharacterDescString = ((descFormat, valueInBits) =>
            {
                switch (descFormat)
                {
                // don't display
                case OutputConfiguration.DescriptorFormat.DontDisplay:
                    return("");

                case OutputConfiguration.DescriptorFormat.DisplayInBits:
                case OutputConfiguration.DescriptorFormat.DisplayInBytes:
                    // add comma and return
                    return(MyExtensions.ConvertValueByDescriptorFormat(descFormat, valueInBits) + ", ");

                default:
                    throw new NotImplementedException();
                }
            });

            return(string.Format("\t{{{0}{1}{2}}},", GetCharacterDescString(OutConfig.descCharWidth, s.Width),
                                 GetCharacterDescString(OutConfig.descCharHeight, s.Height),
                                 OffsetInBytes)
                   .PadRight(15) +

                   string.Format("{0}{1}{2}" + OutConfig.nl,
                                 OutConfig.CommentStart,
                                 Character == '\\' ? "\\ (backslash)" : Character.ToString(),
                                 OutConfig.CommentEnd));
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        // 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();
        }