文档章节

C#彩色艺术化二维码样式设计(仅说思路)

白志华
 白志华
发布于 2015/10/18 10:56
字数 1267
阅读 16
收藏 0

一、样式

1、先看各种二维码的样式吧:

(1)最简单的样式——黑白样式,如下图:

图1  最平常见到的二维码样式
(如果你用智能手机,且已安装二维码扫描软件,扫描之后你会发现它就是一个网址:http://www.lgms.net

(2)以下为在基本样式的基础上进行的改进:

图2  圆形点状样式(为了保持可识别性,三个定位方块图没有圆形点状化)。

 

图3  加外框的圆形点状二维码

 

图4  双色二维码(白底红码)

 

图5  数据区的每个单格格加外框

 

图6  数据区域加阴影

 

图7  多种颜色按序排列

 

    

图8  随机色加框(左)  圆点状+阴影(右)

(关于随机色的生成,见我的另一篇文章:在.net(C#)中随机生成较深的颜色 )

 

图9  数据区用底图纹理填充并单元格加框

 

图10  数据区纹理填充加阴影,整体加外框

 

图11  数据区使用圆形点状且用纹理图填充

 

2、以下为各种彩色艺术二维码的样式:

艺术图1   双色(前景为淡草绿、背景白色) + 圆角 + 附加图形

艺术图2   艺术二维码(旋转 + 纹理填充 + 附加图形)

艺术图3  圆形点状 + 纹理填充 + 附加图形

艺术图4   双色 + 艺术化排列 + 附加图形 + 文字说明

艺术图5  双色 + 附加图形 + 圆角

艺术图6  纹理底图 +  圆角 + 附加图形 + 圆形点状 + 双色

艺术图7  附加图形

艺术图8  圆角 + 附图 + 彩色渐变

 

艺术图9   圆角 +  附加图形 + 数据区外框

 

艺术图10

 

艺术图11

 

艺术图12

 

艺术图13

 

艺术图14

 

艺术图15

 

 说句实在话,上述艺术图形绝大多数是通过设计软件手工制作的,但采用编程方式来实现并不容易,不容易并不代表不能实现,只是需要花费更多的时间罢了。

 

二、枚举

1、根据填充样式(颜色及纹理),我把它分成五种:黑白色,双色,多种有序色,随机色,纹理图填充。

以下为枚举文件的核心代码:


public enum FillType
    {
        /// <summary>
        /// 普通样式
        /// </summary>
        [Description("普通样式:白底黑图")]
        BlackAndWhite,
        /// <summary>
        /// 两种彩色
        /// </summary>
        [Description("前景、背景两种彩色")]
        Bicolored,
        /// <summary>
        /// 多彩的(多种指定颜色)
        /// </summary>
        [Description("多种指定颜色顺序排列")]
        Multicolored,
              
        /// <summary>
        /// 随机色的
        /// </summary>
        [Description("随机色样式")]
        RandomColored,
        /// <summary>
        /// 纹理图填充
        /// </summary>
        [Description("纹理图填充)")]
        Textured
    }


3、根据单格形状,我把它分为三种:矩形块状,圆形点状、圆角状(拐角为圆角矩形)。

以下为C#枚举核心代码:

public enum ShapeType
    {
        /// <summary>
        /// 矩形块状
        /// </summary>
        [Description("矩形块状")]
        Block,
        /// <summary>
        /// 圆形点状
        /// </summary>
        [Description("圆形点状")]
        Dotted,
        /// <summary>
        /// 圆角(仅拐角处呈圆形矩形)
        /// </summary>
        [Description("圆角(仅拐角处呈圆形矩形)")]
        RadiusCorner
    }



4、根据修饰样式,我分为七种情况,以下为枚举核心代码:

public enum DecorativeType
    {
        /// <summary>
        /// 单元格外框
        /// </summary>
        [Description("单元格外框")]
        CellBorder = 1,
        /// <summary>
        /// 数据区外框
        /// </summary>
        [Description("数据区外框")]
        CoreDataBorder = 2,
        
        /// <summary>
        /// 整体加线框(空白区域为四倍于单元格)
        /// </summary>
        [Description("整体加线框(空白区域为四倍于单元格)")]
        OuterBorder = 4,
        /// <summary>
        /// 加阴影
        /// </summary>
        [Description("加阴影")]
        Shadowed = 8,
        /// <summary>
        /// 附加图形
        /// </summary>
        [Description("附加图形")]
        AppendImages = 16,
        /// <summary>
        /// 位置探测图形给特定颜色(DifferentColorOfPositionDetectionPattern)
        /// </summary>
        [Description("位置探测图形给特定颜色")]
        DifferentColorPattern = 32,
        /// <summary>
        /// 修饰类边框
        /// </summary>
        [Description("修饰类边框")]
        DecorativeBorder = 64
    }

三、类构造及实现(仅讲思路):

1、建一个IPainter接口,里面有一个Draw()方法。

interface IPainter
    {
        Bitmap Draw();
    }

2、在此继承出一个IQRCodePainter接口,里面增加定义相关图形样式的公有属性。

interface IQRCodePainter : IPainter
    {
        FillType FillType { get; set; }
        ShapeType ShapeType { get; set; }
        DecorativeType DecorativeType { get; set; }
        string Name { get; set; }
        string Content { get; set; }
        QRCodeEncoder QRCodeEncoder { get; set; }
        Encoding Encoding { get; set; }
        int QRCodeScale { get; set; }
    }

3、接下来就是建一个CodePainter类了,由于它是具体实例的概括抽象,所以,就使用了public abstract 关键字:

public abstract class CodePainter : IQRCodePainter
{
    //实现IQRCodePainter相关公共属性的代码
    //以及实现相关实例所必须的公共方法
    (太长,略。这里仅说思路)
    //还有就是:
    public abstract Bitmap Draw(); //这个由具体的实例类去Override即可。
}



4、实现实例化的类

根据填充样式,写出五个类:

BlackAndWhitePainter,
BicoloredPainter,
MulticoloredPainter,
RandomColoredPainter,
TexturedPainter

里面根据形状不同及修饰样式的不同而做不同的绘制处理。需要说明的是:FillType, ShapeType是单一关系,而DecorativeType是叠加关系,所以,前两者没有使用倍增式数字枚举值,而DecorativeType则使用了1,2,4,8……枚举值方式,以方便实现效果叠加处理。

5、测试界面的设计(用图说话):

 


转载的,没有源码,转自:http://blog.csdn.net/johnsuna/article/details/7933619


本文转载自:http://blog.csdn.net/xiaoxian8023/article/details/8458143

共有 人打赏支持
白志华
粉丝 29
博文 265
码字总数 57524
作品 0
长沙
程序员
二维码太丑?用风格迁移生成个性二维码了解一下

手机二维码太普通,换来换去还是不好看。何不自定义一个自己喜欢的呢?近日,郑州大学、浙江大学、微软亚洲研究院、北京航空航天大学的研究者发布论文,提出一种设计个性化的艺术风格二维码的...

机器之心
03/09
0
0
个性二维码生成器-VisualQRC

话不多说,先上图 原图 二维码 原图 二维码 原图 二维码 这些好看的的二维码都是怎么做的呢,软件原理论文相关:链接 新版本不能彩色,老版本可以彩色,需要彩色功能的直接点击:百度云 密码...

爱前端的小白
2017/12/08
0
0
图像中二维码的检测和定位

二维码 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻...

Tony沈哲
2017/08/23
0
0
二维码生成与扫描--AYScandCode

带颜色,logo 的二维码、条形码生成以及扫描 如果使用二维码扫描请在 info.plist 文件添加 (获取相机权限) <key>NSCameraUsageDescription</key> <string>App需要您的同意,才能访问相机</s...

别情花如依丶
2017/01/06
295
0
EyreFree/EFQRCode

EFQRCode 是一个轻量级的、用来生成和识别二维码的纯 Swift 库,可根据输入的水印图和图标产生艺术二维码,基于 CoreImage 进行开发。受 qrcode 启发。EFQRCode 为你提供了一种更好的在你的 ...

EyreFree
2017/04/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
21分钟前
0
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
1
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
1
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
今天
3
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部