Ejemplo n.º 1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="tFlow"></param>
        private void SetImageSize(imageExtension tFlow)
        {
            switch (tFlow)
            {
                #region imageExtensionVertical
                case imageExtension.Vertical:
                    {
                        float maxHeight = 0;
                        Bitmap _dummyImg = new Bitmap(1, 1);
                        Graphics _dummyG = Graphics.FromImage(_dummyImg);
                        Size temp = qrSize;
                        foreach (var textItem in textLines)
                        {
                            if (String.IsNullOrEmpty(textItem.textData) == false)
                            {
                                SizeF measure = _dummyG.MeasureString(textItem.textData, textItem.fontStyle);
                                maxHeight += measure.Height;
                                if (temp.Width < (int)measure.Width)
                                {
                                    temp.Width = (int)(measure.Width);
                                }
                            }
                        }
                        temp.Height += (int)(Math.Round((maxHeight / imgStep), MidpointRounding.AwayFromZero) * imgStep);
                        if (resizeFont)
                            temp.Width = qrSize.Width;
                        imgSize = temp;

                        break;
                    }
                #endregion
                #region imageExtensionHorizontal
                case imageExtension.Horizontal:
                    {
                        float totalHeight = 0;
                        float maxWidth = 0;
                        Bitmap _dummyImg = new Bitmap(1, 1);
                        Graphics _dummyG = Graphics.FromImage(_dummyImg);

                        Size temp = qrSize;
                        foreach (var textItem in textLines)
                        {
                            if (String.IsNullOrEmpty(textItem.textData) == false)
                            {
                                //tempWidth = _dummyG.MeasureString(textItem.textData, textItem.fontStyle).Width;
                                //if (tempWidth > maxWidth)
                                //{
                                //    maxWidth = tempWidth;
                                //}
                                SizeF measure = _dummyG.MeasureString(textItem.textData, textItem.fontStyle);
                                if (measure.Width > maxWidth)
                                {
                                    maxWidth = measure.Width;
                                }
                                totalHeight += measure.Height;
                            }
                        }
                        temp.Width += (int)(Math.Round((maxWidth / imgStep), MidpointRounding.AwayFromZero) * imgStep);
                        if (totalHeight > temp.Height)
                        {
                            temp.Height = (int)(Math.Round((totalHeight / imgStep), MidpointRounding.AwayFromZero) * imgStep);
                        }
                        imgSize = temp;
                        break;
                    }

                #endregion
                default:
                    break;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="flow"></param>
        private void SetFontSize(imageExtension flow)
        {
            float _fontSize;
            Bitmap _dummyImg;
            Graphics _dummyG;

            _dummyImg = new Bitmap(1, 1);
            _dummyG = Graphics.FromImage(_dummyImg);

            if (resizeFont)
            {
                switch (flow)
                {
                    case imageExtension.Horizontal:
                        {
                            float maxTextHeight = 0;
                            foreach (var textItem in textLines)
                            {
                                SizeF _stringSize = _dummyG.MeasureString(textItem.textData, textItem.fontStyle);
                                maxTextHeight += _stringSize.Height;
                                textItem.pxDimensions = _stringSize;
                            }
                            while (maxTextHeight > qrSize.Height)
                            {
                                maxTextHeight = 0;
                                foreach (var textItem in textLines)
                                {
                                    _fontSize = textItem.fontStyle.Size;
                                    _fontSize -= (float)0.1;
                                    if (_fontSize < 0.5)
                                        throw new ArgumentException("Too many text lines to render with " + qrSize.Height + "px QR-Code" + "\n Cannot use a smaller font size\n");

                                    textItem.fontStyle = new Font(textItem.fontStyle.FontFamily, _fontSize, textItem.fontStyle.Style);

                                    SizeF _stringSize = _dummyG.MeasureString(textItem.textData, textItem.fontStyle);
                                    textItem.pxDimensions = _stringSize;
                                    maxTextHeight += _stringSize.Height;
                                }
                            }
                        }
                        break;
                    case imageExtension.Vertical:
                        foreach (var textItem in textLines)
                        {
                            _fontSize = textItem.fontStyle.Size;
                            SizeF _stringSize = _dummyG.MeasureString(textItem.textData, textItem.fontStyle);
                            while (_stringSize.Width > qrSize.Width)
                            {
                                _fontSize -= (float)0.1;
                                if (_fontSize < 0.5)
                                {
                                    throw new ArgumentException("Text line too long to render with " + qrSize.Height + "px QR-Code" + "\n Cannot use a smaller font size\n");
                                }
                                textItem.fontStyle = new Font(textItem.fontStyle.FontFamily, _fontSize, textItem.fontStyle.Style);
                                _stringSize = _dummyG.MeasureString(textItem.textData, textItem.fontStyle);
                            }
                            textItem.pxDimensions = _stringSize;
                        }
                        break;
                    default:
                        break;
                }
            }
            else
            {
                foreach (var textItem in textLines)
                {
                    SizeF _stringSize = _dummyG.MeasureString(textItem.textData, textItem.fontStyle);
                    textItem.pxDimensions = _stringSize;
                }
            }
        }