目录

数据类设计_图片类设计之5_不规则类图形混合算法前端架构

数据类设计_图片类设计之5_不规则类图形混合算法(前端架构)

前言

学的东西多了,要想办法用出来.C和C++是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容

引入

接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及不规则图片的混合算法.

图片示意图

图片是怎样表示的,这里把前面的补上

https://i-blog.csdnimg.cn/direct/2f2dbf5d86d2451ab6238d14bea972a3.png

这里的数字1是不规则数据类对象,他被假设左上角有个基点,代表了两个隐藏属性:x坐标和y坐标的原点.对于其他的数据类对象:如矩阵类Matrix对象和Fillet_Matrix对象也有.总的来说,只要是图形类对象,都有这两个隐藏属性.

混合算法—不规则图形

和前面一样,背景为一个矩阵类对象.前景是字符类对象

 
//字符图形类定义
struct Zifu{
    vector<Zifu_point> zps;
}
//字符点类定义
struct Zifu_point{
    short x_cord;    //x坐标,相对于基点的x值
    short y_cord;    //y坐标,相对于基点的y值
}
 

//字符对象混合到矩阵对象中
Matrix& mix_zifu(short x_ref,short y_ref,Matrix& mx,Zifu& zf){
    
    //在矩阵对象中定位字符对象的基准行
    vector<vector<Reg_Point>>::iterator itmx=mx.matrix.begin()+x_ref;
    //下面这行不要这样写:定位基准点需要先进行行偏移
    //vector<Reg_Point>::iterator itmxs=(*itmx).begin()+y_ref;

    //遍历图形中的每个点,将其写入矩阵.
    for(itzf=zf.zps.begin();itzf!=zf.zps.end();itzf++){
        //找到矩阵中对应的行
        itmx=itmx+(*itzf).x_cord;
        //找到行中对应的点
        itmxs=(*itmx).begin()+y_ref+(*itzf).y_cord;
        //点写入黑色,rgb等于3个0
        (*itmxs).red=0;
        (*itmxs).green=0;
        (*itmxs).blue=0;
    }
    return mx;
}

说明 :

1.代码中有一些假设:矩阵大小必须大于字体大小,这个由传入参数所控制.

字符图形类只包含x坐标和y坐标 ,矩阵类对象采用白色打底,写进去的点统一成黑色.

也就是说首先得生成一个Matrix对象如下:

//生成长20,高100,颜色为白色的矩阵对象
Matrix matrix(20,100,255,255,255);  //3个255表示白色

假设字符基点和矩阵基点重合,调用以下函数即可生成图形:

//假设zf1是传入的字符对象,数字"1"的点集合,他可能来自数据库,可能来自文件
mix_zifu(0,0,matrix,zf1);    

注意 :如果想输入的字符有颜色,可以修改函数定义,把颜色作为形参定义进去;传参时传入颜色值.

小结

字符类有些特殊,未定义颜色,定义了坐标.规则图形类里定义了颜色,未定义坐标.两者稍有不同.

预告

任意图形类型建立

鸣谢

笔者另一篇帖子 里有求下载链接,如果您感觉有所帮助,请帮忙点击,下载,提高等级