二维码如何把里面的 黑点变成圆点

好奇都是要学的 2021-03-18 03:43:03
我用 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeScale = 4;
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;

Bitmap bt = qrCodeEncoder.Encode(str, Encoding.Default);
bt.Save(QRurl, ImageFormat.Png);
二维码 生成后

如何把里面的黑方点 变成下面 圆点


或者说,如何 能直接生成 圆点的二维码。 我用了ZXing.dll 和 ThoughtWorks.QRCode.Codec.dll 都没有圆点说明。

有绘制大神讲解下吗? 在下学习了
...全文
908 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2021-03-18
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QRCodeTransfer
{
    public partial class Form1 : Form
    {
        private Bitmap raw_image = (Bitmap)Image.FromFile("raw_code.png");
        private Bitmap target_image = null;
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(raw_image, 0, 0, panel1.Width, panel1.Height);
        }

        private void panel2_Paint(object sender, PaintEventArgs e)
        {
            if(target_image != null)
            {
                e.Graphics.DrawImage(target_image, 0, 0, panel2.Width, panel2.Height);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //1.计算最小宽度
            target_image = new Bitmap(raw_image.Width, raw_image.Height);
            int x = raw_image.Width / 2;
            Rectangle center_box=new Rectangle();
            Color center_color = raw_image.GetPixel(x, x);
            int box_left = 0;
            int box_right = 0;
            while (x>0)
            {
                if(raw_image.GetPixel(x,x)!=center_color)
                {
                    box_left = x+1;
                    break;
                }
                x--;
            }
            x = raw_image.Width / 2;
            while (x < raw_image.Width)
            {
                if (raw_image.GetPixel(x, x) != center_color)
                {
                    box_right = x - 1;
                    break;
                }
                x++;
            }
            int a = box_right - box_left + 1;
            center_box = new Rectangle(box_left, box_left, a,a);

            //2.绘制新二维码
            using (Graphics g = Graphics.FromImage(target_image))
            {
                g.Clear(Color.White);
                int box_count = raw_image.Width / center_box.Width;
                for (int i = 0; i < box_count; i++)
                {
                    for (int j = 0; j < box_count; j++)
                    {
                        if (raw_image.GetPixel(i * center_box.Width, j * center_box.Height) == center_color)
                        {
                            Rectangle box = new Rectangle(i * center_box.Width, j * center_box.Height, center_box.Width, center_box.Height);
                            g.FillEllipse(Brushes.Black, box);
                        }
                    }
                }
            }
            target_image.Save("target.png", System.Drawing.Imaging.ImageFormat.Png);

            //3.更新界面
            panel2.Invalidate();
        }
    }
}
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2021-03-18 03:43
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。