实现二维码轮廓的绘制和填充

最近刚在做一个项目,里面就需要用到二维码的轮廓的绘制以及填充的实现,当然在这个项目里面需要的是矢量填充。二维码的绘制在网上有很多的资源,源代码也不少,只需要下载一个库就可以了,实现起来也就几行代码的事情,在这里呢就不要过多的叙述二维码的库的下载和基本的绘制问题。下面是我的实现的图形,有这方面需要的朋友可以参考一下。

 

第一个图形是我实现的二维码轮廓的图形,第二个是实现矢量填充的。刚开始没有弄懂的时候还折腾了好就才想到了实现的方法,弄明白方法了其实也挺简单的。需要用到的话可以参考一下下面的代码,最近没有时间去优化了,目的主要是实现了就可以,所以如果谁有更好的方法的话,麻烦大家大家分享一下,我也顺便优化优化。

1.二维码的轮廓绘制代码

//判断是否绘制

 for(int row = 0;row < m_zintSymbol->rows;row++)        
{            
     int count = 0;            
     QList<QPointF> Point;            
     Point.clear();
    for (int i = 0; i < m_zintSymbol->width+1; i++) 
    {
      if (module_set(row, i)) 
      {                            
           int ed = module_set(row, i);                            
           int linewidth = 0;                            
          for (int j = i; j < m_zintSymbol->width; j++, linewidth++)                                
        if (ed != module_set(row, j))                                 
       break;                            
      if (!((i > main_width) && (row == m_zintSymbol->rows - 1)))
    { 

//判断下一个是否为绘制的矩形  没有则化右边的那一条直线   有就不需要绘制了
            if(!module_set(row,i+1))
    {
            int yy = m_zintSymbol->row_height[row];
            painter->drawLine(i + 1,y,i+1,y+yy);
    }

//同理  判断前一个矩形是否需要绘制  如果没有的话就绘制左边的那一条竖着的直线
             if(!module_set(row,i-1))
           {
                   int yy = m_zintSymbol->row_height[row];
                  painter->drawLine(i,y+yy,i,y);
           }

//判断下边一个是否有图形  没有则绘制下边一条直线
         if(!module_set(row+1,i))
       {
             int yy = m_zintSymbol->row_height[row];
             painter->drawLine(i,y+yy,i+1,y+yy);
       }

//判断上面是否有绘制图形  没有就绘制上面一条直线
       if(!module_set(row-1,i))
     {
           painter->drawLine(i,y,i+1,y);
      }
   }
}

}

}

绘制轮廓的核心代码大概就是这样的, 实现起来挺简单的,主要就按着绘制二维码的方法来,在绘制的时候增加判断会绘制。

2, 二维码填充线的绘制

 for(int row = 0;row < m_zintSymbol->rows;row++)       
 {           
       int count = 0;            
       QList<QPointF> Point;            
       Point.clear();
       for (int i = 0; i < m_zintSymbol->width+1; i++)
     {
         if(module_set(row,i))                 
        {                               
            if(!module_set(row,i+1))                                
           {                                    
               Point.append(QPointF(count,y));                                   
               Point.append(QPointF(i+1,y));                                   
               count = i+1;                               
           }                            
       }else {                                
           if(module_set(row,i+1))                                
          {                                    
              count = i + 1;                                
          }                            
     }

       }

      for(double k = 0; k < 1;k += 0.1)

    {

           for(int i = 0;i < Point.size();i += 2)

           {

                   painter->drawLine(QPointF(Point.at(i).x(),Point.at(i).y()+k)

                 ,QPointF(QPointF(Point.at(i+1).x(),Point.at(i).y()+k)));

          }

      }

}

这就是我实现的轮廓和填充图形的绘制的图形,如果有需要的朋友哪里看不懂的话,可以私聊我,大家一起学习。有更好的想法的朋友也希望给我分享一下,让我也学习一下。在这不胜感激。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Qt中实现二维码生成和扫码可以通过以下步骤进行: 1. 引入QZXing库:QZXing是一个用于二维码解码和编码的开源库,可以在Qt项目中使用。你可以通过在项目中添加QZXing库的源代码或使用qpm工具来引入该库。 2. 生成二维码:使用QZXing库中的QZXing类来生成二维码。你可以将要生成的文本作为输入,然后调用encodeData()函数来生成二维码图像。 3. 显示二维码:将生成的二维码图像显示在Qt的控件上,例如QLabel或QPixmap。 4. 扫描二维码:使用QZXing库中的QZXing类来扫描二维码。你可以通过调用decodeImage()函数来解码从摄像头或图像文件中获取的图像。 下面是一个简单的示例代码,演示了如何在Qt中实现二维码生成和扫码: ```cpp #include <QZXing.h> #include <QImage> #include <QLabel> #include <QCamera> #include <QCameraViewfinder> // 生成二维码 void generateQRCode(const QString& text, QLabel* label) { QZXing zxing; QImage image = zxing.encodeData(text); label->setPixmap(QPixmap::fromImage(image)); } // 扫描二维码 QString scanQRCode(QCamera* camera) { QZXing zxing; QImage image = camera->viewfinder()->grab().toImage(); QString result = zxing.decodeImage(image); return result; } // 示例用法 int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建窗口和控件 QWidget window; QLabel label; QCamera camera; // 生成二维码并显示 generateQRCode("Hello, World!", &label); label.show(); // 扫描二维码 QString result = scanQRCode(&camera); qDebug() << "Scanned QR Code: " << result; return app.exec(); } ``` 请注意,这只是一个简单的示例代码,你可能需要根据你的具体需求进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值