我们滴效果:

二维码现在随处可见,极大的方便了我们的生活,而你有没有对它感到好奇呢?

其实我们也可以制作简单的二维码,开始制作之前,我们需要补充一个背景。

计算机的任何信息,其实都是一串0/1的数字构成。

故基于此,我们大致的思路已经完成了:将信息全部转化为二进制码,再将0定义为黑色,1定义为白色,绘制实心正方体,而总体构成我们的二维码。

1.转换二进制方法

我们需要了解到,二进制码

     //将字符串信息转化为二进制码,存在 int数组里public void change() {//存储单个字符的字符串String solo = new String();//读取整个字符串for (int i = 0; i < input.length(); i++) {//得到单个字符char a = input.charAt(i);//将字符转换为二进制码int c = (int) a;solo = bin(c);//让int数组存入,因为我们的得到是字符串,所以需要判断后存入//一个字符串存入了16个0/1.for (int j = 0; j < 16; j++) {if (solo.charAt(j) == '0') {bins.add(0);} else {bins.add(1);}}}System.out.println(bins);}//将char转化为二进制码public String bin(int a) {//存储单个字符的字符串String bin = new String();//利用位运算,得到最后一位,然后再将数左移一位//字符采取的是char类型,一共有16bit,所以字符串要连接16个0/1。for (int i = 0; i < 16; i++) {//注意二进制码加入位置if ((a & 1) == 0) {bin = "0" + bin;} else {bin = "1" + bin;}a = a >> 1;}return bin;}

2.绘制方法

    //开始绘制@Overridepublic void paint(Graphics g) {super.paint(g);//用于使方块间隔int wid = 0;//用于换行int hig = 0;//遍历存入所有二进制码的数组for (int i = 0; i < bins.size(); i++) {if (bins.get(i) == 0) {bg.setColor(Color.BLACK);} else {bg.setColor(Color.WHITE);}//size为方块尺寸bg.fillRect(size * wid, size * hig, size, size);wid++;//以十六个二进制码为一行,代表一个字符if (wid == 16) {wid = 0;hig++;}}g.drawImage(qrBuff, 200, 350, null);}

3.识别方法(将二维码放在缓存图像里识别)

      public void identify(BufferedImage qrbuff) {//存各种颜色int值int rgb, red, green, blue, gray;//存字符的int值int num = 0;//存储字符串String out = null;//为了防止边界干扰,我们将起点放在实心正方形的中心for (int j =  size / 2; j < qrbuff.getHeight(); j += size) {for (int i = size / 2; i < qrBuff.getWidth(); i += size) {//因为有时候图片会损失,所以不一定是纯白和纯黑,故我们引进灰度值,更好判断黑白rgb = qrBuff.getRGB(i, j);red = (rgb >> 16) & 255;green = (rgb >> 8) & 255;blue = (rgb >> 0) & 255;gray = (red + green + blue) / 3;if (gray > 127) {//二进制位上为1num = num * 2 + 1;} else {//二进制位上为0num = num *2;}}//防止字符串出现null。//将int转化为所需的char字符,再连接到字符串上if(out == null){out = ""+(char)num;}else {out += (char) num;}num = 0;}

4.界面设计

已经完全讲烂了,只有两个点值得注意:

1.使用内部监听器,可以大量减少数据的传递

        ActionListener ac = new ActionListener() {//识别二维码@Overridepublic void actionPerformed(ActionEvent e) {identify(qrBuff);}

2.使用多行文本编辑框:

        JTextArea jt = new JTextArea();//设置文本框大小jt.setPreferredSize(dim);//设置文本框字体jt.setFont(new Font("宋体", Font.BOLD,30));//设置换行与输出间隔一行jt.setLineWrap(true);jt.append(out+ "\n");

这样我们就大功告成了!!!

二维码“仙人”——教你制作二维码,读取二维码相关推荐

  1. 若依ruoyi——手把手教你制作自己的管理系统【二、修改样式】

    阿里图标一( ̄︶ ̄*)) 图片白嫖一((* ̄3 ̄)╭ ********* 专栏略长 ==== 爆肝万字 ==== 细节狂魔 ==== 请准备好一键三连 ********* 运行成功后: idea后台正 ...

  2. html表白程序源码 html生日快乐网站制作 HTML生日快乐代码 表白程序源码html 程序员表白代码html

    ❤ 精彩专栏推荐

  3. 使用二维码识别技术的好处_施工工艺用二维码如何交底?

    施工工艺用二维码如何交底? 传统施工工艺交底,需要大量纸质资料,存档.交底极为麻烦:依托二维码+小程序交底方式,扫码即可查看交底记录,小编教大家制作施工工艺交底管理二维码: 施工工艺 施工工艺交底(静 ...

  4. uniapp中qrcode生成二维码后传的参数不见了_阿虚教你制作动态二维码,超详细教程!

    这篇教程很早之前就答应几个粉丝要写,拖的有点久了. 内容比较多,先上个目录 阿虚的教程会迟到,但永远不会缺席.hahahahhaha... 一. 先说一下今天要教的内容 ʕ•̫͡•ོʔ•̫͡•ཻʕ•̫ ...

  5. 二维码怎么制作?手把手教你制作生成

    二维码怎么制作?现如今二维码无处不在,我们在外买东西支付,或者二维码名片等等.二维码作为我们日常工作和学习中重要的沟通桥梁,我们除了保存页面自带的二维码之外,还需要学会自己制作二维码.这里小编就来教大 ...

  6. 链接怎么生成二维码?教你学会制作二维码

    链接怎么生成二维码?现如今二维码的应用十分广泛,我们几乎每天都会接触到二维码.二维码蕴含着丰富的信息,通过扫描二维码,我们可以获取很多信息.那么大家会制作二维码吗?其实制作二维码并非是什么难事,这里小 ...

  7. 制作二维码怎么做?手把手教你制作生成二维码

    制作二维码怎么做?在我们的日常生活中总是会看到各色各样的二维码,二维码可以说在我们的生活中无处不在.我们除了会看到一些最简单二维码,还会看到一些好看样式的二维码.那么问题来了,二维码如何制作?这里小编 ...

  8. 如何做二维码?教你一招轻松制作个性二维码

    怎么制作二维码呢?在平常会接触很多的二维码,可能是跳转到商品购买链接,也可能是展示图片,文字,视频等等内容,那么这些二维码制作的方法是什么呢?其实想要制作这些类型的二维码的,方法都是一样的,通过二维码 ...

  9. 如何制作二维码?手把手教你制作

    二维码已然成为我们日常生活中不可或缺的一部分,它可以大大提高我们的生活便捷程度,我们可以利用二维码付款.登录.打开网页等.小伙伴们会不会很好奇二维码都是怎么制作的呢?其实现在很多app都可以用来制作二 ...

最新文章

  1. 【PHP】 获取网站信息
  2. 下载并配置完dex-net,在CLI中执行相应操作命令报错解决
  3. 【企业管理】企业创造的要素
  4. C++求LCM的和算法(附完整源码)
  5. python字符串输入_python如何输入字符串
  6. guava的正确引入方式_使用Guava的AbstractInvocationHandler正确完成代理
  7. Python进阶|聊聊异常处理
  8. requestmapping中path与value区别_1、Spring注解之@RequestMapping
  9. java存储数据_Java 数据存储
  10. struts2校验框架之Visitor校验器
  11. nginx 安装_安装Nginx的几种方式
  12. 怎么在大数据里面删除不了_数据库删除大数据怎么操作
  13. 计算机应用技术个人研修总结,学习应用信息技术的研修体会总结
  14. 华为交换机eth口作用_华为网络交换机mode键作用 华为交换机这些接口的作用?...
  15. 为什么说 Gumroad 是一家 “失败” 的创业公司?
  16. 手机评论文本挖掘与数据分析(Python)
  17. 测试VPS线路与网络的小帮手
  18. 计算机系统删除一点会怎么样,怎么样清理C盘的多余文件?
  19. 涂鸦画板,监听touch事件,手机端
  20. 实时在线游戏服务器客户端交互总结

热门文章

  1. java class getfield_Java Class类 getField()方法及示例
  2. Android应用程序签名(官方文档中文版)
  3. Linux音频驱动之一:音频驱动注册流程
  4. 华为服务器登陆不了系统,云服务器什么登陆不了
  5. 使用HTML制作静态网站作业——我的校园运动会(HTML+CSS)
  6. 关于for循环数据溢出问题
  7. Maya(玛雅)功能细讨-Ⅰ|使用MASH 程序效果创建运动图形
  8. 电商第一站【EICC劳工标准的工作时间】
  9. Java job interview:高校区LAN局域网校内网组建实践经验
  10. 精准拖动的svg小锥形