前言
学的东西多了,要想办法用出来.C和C++是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容
引入
接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及不规则图片的混合算法.
图片示意图
图片是怎样表示的,这里把前面的补上
这里的数字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.代码中有一些假设:矩阵大小必须大于字体大小,这个由传入参数所控制.
2.字符图形类只包含x坐标和y坐标,矩阵类对象采用白色打底,写进去的点统一成黑色.
也就是说首先得生成一个Matrix对象如下:
//生成长20,高100,颜色为白色的矩阵对象
Matrix matrix(20,100,255,255,255); //3个255表示白色
假设字符基点和矩阵基点重合,调用以下函数即可生成图形:
//假设zf1是传入的字符对象,数字"1"的点集合,他可能来自数据库,可能来自文件
mix_zifu(0,0,matrix,zf1);
注意:如果想输入的字符有颜色,可以修改函数定义,把颜色作为形参定义进去;传参时传入颜色值.
小结
字符类有些特殊,未定义颜色,定义了坐标.规则图形类里定义了颜色,未定义坐标.两者稍有不同.
预告
任意图形类型建立
鸣谢
笔者另一篇帖子数据在硬件和软件中的表示-CSDN博客里有求下载链接,如果您感觉有所帮助,请帮忙点击,下载,提高等级