qrcodenet二维码图片下扩展区域添加号段的操作

本文介绍了一种方法,用于批量生成包含底部文字说明的二维码图片。通过调整绘图过程中的参数,确保二维码准确置于背景图之上,并在二维码下方添加一行文字。文中详细解释了如何利用Graphics对象绘制二维码及文字的具体步骤。

总监安排了个任务,一个号码导出一个二维码图, 我实现了最终还能批量生成,结果主管说要在图片下边添加一行,和图片是一起的

最开始把控件的上的图给改了,结果保存起来没用,控件上的图跟要保存的不是一个事。

最终找到在此方法中修改:

程序是先绘制背景图。

然后,把二维码的矩阵,小模块一个个打印出来。

把y点的padding 数去掉,生成的图片就会升到背景图的顶部,觉得太靠顶了自己加个参数。

Point modulePosition = new Point(preX * size.ModuleSize + padding + offset.X,
                                y * size.ModuleSize + offset.Y);
Point modulePosition = new Point(preX * size.ModuleSize + padding + offset.X,
                            y * size.ModuleSize  + offset.Y);
 
   public void Draw(Graphics graphics, BitMatrix QrMatrix, Point offset)
        {
            int width = QrMatrix == null ? 21 : QrMatrix.Width;

            DrawingSize size = m_iSize.GetSize(width);
            //绘背景图图
            graphics.FillRectangle(m_LightBrush, offset.X, offset.Y, size.CodeWidth, size.CodeWidth);

            if(QrMatrix == null || size.ModuleSize == 0)
                return;

            int padding = (size.CodeWidth - (size.ModuleSize * width)) / 2;

            int preX = -1;

            for (int y = 0; y < width; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    if (QrMatrix[x, y])
                    {
                        //Set start point if preX == -1
                        if (preX == -1)
                            preX = x;
                        //If this is last module in that row. Draw rectangle
                        if (x == width - 1)
                        {
                            Point modulePosition = new Point(preX * size.ModuleSize + padding + offset.X,
                                y * size.ModuleSize + offset.Y);
                            Size rectSize = new Size((x - preX + 1) * size.ModuleSize, size.ModuleSize);
                            graphics.FillRectangle(m_DarkBrush, modulePosition.X, modulePosition.Y, rectSize.Width, rectSize.Height);
                            preX = -1;
                        }
                    }
                    else if (!QrMatrix[x, y] && preX != -1)
                    {
                        //Here will be first light module after sequence of dark module.
                        //Draw previews sequence of dark Module
                        Point modulePosition = new Point(preX * size.ModuleSize + padding + offset.X,
                            y * size.ModuleSize  + offset.Y);
                        Size rectSize = new Size((x - preX) * size.ModuleSize, size.ModuleSize);
                        graphics.FillRectangle(m_DarkBrush, modulePosition.X, modulePosition.Y, rectSize.Width, rectSize.Height);
                        preX = -1;
                    }
                }
            }
         
        }

 

转载于:https://www.cnblogs.com/zuochanzi/p/5980937.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值