1. 程式人生 > >GBK點陣顯示字型檔的製作和使用

GBK點陣顯示字型檔的製作和使用

GBK編碼共收錄漢字21003個、符號883個,並提供1894個造字碼位,簡、繁體字融於一庫。以兩個位元組表示一個漢字,編碼範圍是0x8140~0xfefe,相容GB2318,並覆蓋了unicode中的所有漢字。Win7記事本預設以GBK儲存漢字。

開發環境

Win7、Eclipse、MinGW

1.生成GBK全字元檔案

執行下面這段程式碼,生成GBK全字元檔案gbk.txt,編碼範圍0x8140~0xfefe。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	FILE *fp=0;
	char ch=0;
	unsigned short int start=0x8140;
	unsigned char part1=0;
	unsigned char part2=0;

	fp=fopen("gbk.txt","wb");
	if(fp==NULL)
	{
		perror("Cann't open gbk.txt");
		return -1;
	}
	else
		printf("Creat file gbk.txt/n");
	while(start < 0xfeff)
	{
		part1=start>>8;
		part2=start;
		fputc(part1,fp);
		fputc(part2,fp);
		start++;
	}
	fclose(fp);
	printf("success!");

	return 0;
}

執行後,用記事本開啟gbk.txt檔案,可以看到其中的字元。

2.生成字模二進位制檔案

用“牧碼字模”軟體開啟gbk.txt檔案,選擇字型為宋體,字重為1,點陣大小16*16,對齊方式為左下,取模方式為“縱向取模、高位在下”。輸出格式選擇bin。然後點選輸出,會生成一個temp.bin檔案,改名為gbk.bin。

gbk.bin檔案就是GBK編碼字元的點陣字型檔檔案,每32個位元組可以繪製一個字元,例如第一個字元‘丂’的顯示如下:

取模的資料為:

0x02, 0x02, 0x02, 0xc2, 0xb2, 0x8e, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x40, 0x3f, 0x00, 0x00, 0x00, 0x00,

3.使用字型檔檔案

gbk.bin檔案中按GBK編碼的大小排列,每32個位元組可以顯示一個字元,假設一個字元的GBK編碼為NUM,那麼它的點陣資料第一個位元組的位置就是:

(NUM-0x8240)*32

從這個位元組開始,讀取32個位元組,將其按按照取模方式顯示即可。

例如:用Linux的終端模擬點陣螢幕,每個字元位置就是一個點,程式如下:

#include <stdio.h>
#include <unistd.h>
#include <curses.h>

#define START 0x8140
#define DATANUM 0x20

int displaychar(FILE *fp,unsigned short int dispch,char fillch,char start_x,char start_y);

int main(void)
{
	FILE * fp=0;
	unsigned short int testch = 0xb0ae;  //漢字'愛‘的gbk碼

	fp = fopen("gbk.bin","rb");

	initscr();

	displaychar(fp,testch,'*',0,0);

	refresh();

	while(1);
	endwin();
	fclose(fp);
	return 0;
}

/*
 * fp指向點陣字型檔二進位制檔案
 * 以點陣方式顯示一個GBK字元
 * dispch是要顯示的字元,fillch是填充點陣的字元
 * start_x,start_y是顯示的起始座標
 */
int displaychar(FILE *fp,unsigned short int dispch,char fillch,char start_x,char start_y)
{
	char x=start_x;
	char y=start_y;
	unsigned int location=(dispch-START)*DATANUM;

	int i=0;
	int j=0;
	char buf=0;

	fseek(fp,location,SEEK_SET);

	for(i=0;i<DATANUM;i++)
	{
		buf=fgetc(fp);

		//顯示一個位元組
		for(j=0;j<8;j++)
		{
			move(y+j,x);
			if( buf & (0x01<<j) )
			{
				addch(fillch);
			}
		}

		if(x == (start_x+15))
		{
			x=start_x;
			y=start_y+8;
		}
		else
			x++;
	}
	return 0;

}

顯示效果如下:

下載:

相關推薦

GBK點陣顯示字型檔製作使用

GBK編碼共收錄漢字21003個、符號883個,並提供1894個造字碼位,簡、繁體字融於一庫。以兩個位元組表示一個漢字,編碼範圍是0x8140~0xfefe,相容GB2318,並覆蓋了unicode中的所有漢字。Win7記事本預設以GBK儲存漢字。 開發環境 Win7、Eclipse、MinGW

EasyUI製作隱藏的表格,查詢時顯示錶格結果

1.HTML頁面很簡單,如圖:   2.接下來設定表格的隱藏與顯示,隱藏語句放到頁面初始化方法裡就行,顯示語句放到查詢方法裡如圖:   例如:頁面初始化方法:     查詢方法(即查詢按鈕的點選事件): &

emwin字型檔製作及漢字顯示

備註:工具是nxp官方釋放出來的,可以到連結下載:http://download.csdn.net/download/armwind/10103643   最近在研究emwin字型顯示部分,但由於無法看到原始碼,也不知道emwin是如何實現的。也算是看葫蘆畫瓢,記錄下字型檔製作過程。

MiniGUI TTF旋轉字型檔製作並豎直顯示文字

一. 製作TTF旋轉字型檔 1.下載fontforge,可以在Ubuntu軟體中心下載 2. 用該軟體開啟字型檔之後,按ctrl+a全選文字 3.點選上面工具欄的基礎–>變換–>如圖設定

LED點陣顯示,有關特殊國別(阿拉伯,希伯來,泰文)字元排版亂碼問題解決

序:最近公司的需求:做一個模擬LED屏的顯示控制元件中間各種曲折!此文做個記錄,本來早就改寫完的!各種原因前後隔了兩個多月!文章寫的比較詳細,熟悉的大佬可以跳過直接看程式碼!PS:後面有完整的程式碼正文:具體的讀字型檔和點陣顯示就不詳細寫了,可以參考  簡書ForeverCy

用 74hc138 74hc595 驅動 8x8 點陣顯示

用STC89C52,74hc138驅動列,74hc595驅動行,8x8點陣顯示問題。想顯示箭頭,......。懸賞分:30       解決時間:2010-12-10 08:58//=============================================最佳答案:題目給出的程式基本結構是正

在SQL20082012裏面怎麽讓顯示全部行編輯 全部而不是2001000

時間 所有 microsoft man server2 soft 比較 資源管理 sql 在sql server2008裏面,可能微軟考慮到數據量比較大,如果直接返回所有行,可能造成耗費時間過多。所有默認為"編輯前200行"和"返回前1000行".這對於有些朋友來說不太方面

struts2 全局攔截器,顯示請求方法參數

功能 defaults i18n token override params tin back alias 後臺系統中應該須要一個功能那就是將每一個請求的url地址和請求的參數log出來,方便系統調試和bug追蹤,使用struts2時能夠使用struts2的全局攔截器實

一起talk C栗子吧(第一百二十三回:C語言實例--顯示變量函數的地址)

調試 ora 部分 example 多線程 ear red 語言 help 各位看官們,大家好,上一回中咱們說的是多線程的樣例。這一回咱們說的樣例是:顯示變量和函數的地址。閑話休提,言歸正轉。讓我們一起talk C栗子吧! 在編敲代碼時,有時候須

編碼格式簡介:ASCII碼、ANSI、GBK、GB2312、GB18030Unicode、UTF-8,BOM頭

family 用兩個 圖片 and 正是 全球化 asc 即使 little 編碼格式簡介:ASCII碼、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM頭 二進制: 只有0和1。 十進制、十六進制、八進制: 計算機其實挺笨的,它只

點陣顯示心型

圖案 stat 字符轉換 include har nbsp ddr ati sign 心形圖案 #include<reg52.h> //綁定位 sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; s

使用bootstrap table時不能顯示篩選列分頁每頁顯示的行數

pts -i str 顯示 data bootstra 同事 bootstrap src 使用bootstrap table時不能顯示篩選列和分頁每頁顯示的行數 後來在同事的幫助下,才發現沒有引用bootstrap的js文件 <script src="/Scr

ListView中動態顯示隱藏HeaderViewFooterView

roi ron mas relative 監聽事件 isp 刪除 listen 具體實現 ListView中動態顯示和隱藏Header&Footer 解決思路: 直接設置HeaderView和FooterView.setVisibility(View.GONE)無效

解決echarts餅圖顯示百分比,顯示內容字體及大小

fonts mat 好的 pan har tle title log option // 基於準備好的dom,初始化echarts實例 var pieEchart = echarts.init(document.getElementById(‘pi

織夢後臺自定義表單,中文不顯示,數字字母顯示的解決辦法

數字和字母 如果 PE spa templet lsp 文件 html fields 1.找到 找到dede/templets/diy_list.htm 這個文件。 2.找到htmlspecialchars($fields[$field]); 這個位置,請在工具

vue elementui table 雙擊單元格實現編輯,聚焦,失去焦點,顯示隱藏inputspan

ntc 單元 src func cell Dimension === http nts <el-table :data="tableData" class="tb-edit" style="width: 100%"

【領卓教育】Linux--靜態庫與動態庫(共享庫) 區別、製作使用

1.概念和區別      靜態庫 :(1)libxxx.a ,程式在編譯時,將庫編譯 進可執行程式中!                     &nbs

WWW實現圖片資源顯示以及儲存本地載入

WWW實現圖片資源顯示以及儲存和本地載入 using UnityEngine; using System.Collections; using System.IO; using UnityEditor; enum GetPicType { DownLoad = 0, Local

伺服器(Dell T360+2塊Tesla P100)配置顯示卡驅動cuda最終版(終於配置好了)

前言: 一開始我們實驗室嘗試用deb安裝包的方法安裝NVIDIA Tesla P100對應的顯示卡驅動和CUDA,但是總是出現重複登入的問題,迫不得已我們最後採用比較繁瑣的用run檔案安裝顯示卡驅動和CUDA的方法。(還是建議先用deb檔案安裝一下試試,因為比較簡便。) 首先明確一下,我沒有

分別顯示用floatdouble指數記數法所能代表的最大最小數字

java中指數記數法是指用大寫的E來替代10的一種計數方式,如:1.4E-45 就表示 1.4*10^(-45),也就是1.4乘10的-45次方。 指數記數法已經瞭解了,那麼float和double所能代表的最大和最小數怎麼求呢?沒關係,在它們對應的包裝器型別中,已經定義好了對應的屬性: