Ubuntu系统要安装好编译环境,若无,详情参考:https://blog.youkuaiyun.com/arau_sh/article/details/6587396
一、区位码与机内码简介
- 所有汉字及符号放在一个
94*94
的方阵中,行叫做区
,列叫做位
,所以是94区、94位,也可以理解为坐标
,每一个汉字或者符号都对应一个区码和位码,把区码和位码组合起来,区码在前
,位码在后
,就是区位码
。
GB2312字符集中:
1)01~09区(682个):特殊符号、数字、英文字符、制表符等,包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母等在内的682个全角字符;
2)10~15区:空区,留待扩展;
3)16~55区(3755个):常用汉字(也称一级汉字),按拼音排序;
4)56~87区(3008个):非常用汉字(也称二级汉字),按部首/笔画排序;
5)88~94区:空区,留待扩展
- 在计算机中,区位码会与ASCII码混淆,为了避免混淆,要避开ASCII码(00H~1FH),还要与ASCII码相区分开,所以在原始的区码和位码上分别加上20H(避开ASCII码),加上80H,分别构成高位字节和低位字节。
- 80H原因:规定国标码中的每个字节的
最高位
都从0换成1,即相当于每个字节都再加上128(十六进制为80,即80H
;二进制为1000 0000
),由于ASCII码
只用了一个字节中的低7位
,所以,这个首位(最高位)上的“1
”就可以作为识别汉字编码
的标志,计算机在处理到首位是“1”
的编码时就把它理解为汉字
,在处理到首位是“0”
的编码时就把它理解为ASCII字符
。
二、字形数据存储与获取
- 点阵存储
- 获取汉字方式
三、Ubuntu下展示
3.1 ubuntu新建文件夹
新建一个文件夹,将所用图片,.cpp代码,.txt文件,ASCII码,24*24汉字点阵文件都放在这个文件夹中。
3.2 代码及.txt文件
- 编译1.cpp程序
#include<iostream>
#include<opencv/cv.h>
#include"opencv2/opencv.hpp"
#include<opencv/cxcore.h>
#include<opencv/highgui.h>
#include<math.h>
using namespace cv;
using namespace std;
void paint_chinese(Mat& image,int x_offset,int y_offset,unsigned long offset);
void paint_ascii(Mat& image,int x_offset,int y_offset,unsigned long offset);
void put_text_to_image(int x_offset,int y_offset,String image_path,char* logo_path);
int main(){
String image_path="1.jpeg";
char* logo_path="logo.txt";
put_text_to_image(20,300,image_path,logo_path);
return 0;
}
void paint_ascii(Mat& image,int x_offset,int y_offset,unsigned long offset){
//绘制的起点坐标
Point p;
p.x = x_offset;
p.y = y_offset;