C語言直接顯示漢字(轉)
C語言直接顯示漢字(轉)[@more@]
如何顯示漢字
在模式 13H 下, 直接寫屏顯示漢字.
其中 hzk16 是 UCDOS 的字型檔, 把它放在當前目錄下
顯示漢字用的是 區位碼, 稍加修改可變成顯示其它碼.
// Graphics Mode 13h Test, Display a Chinese String, Wildrose Inc.
// Compile it with Watcom C/C++ 10.0 compiler
// Copyright(c) Jan. 1997 ZhangWei
// All rights reserved
#if !defined(__WATCOMC__)' '!defined(__386__)
#error "This Program needs Watcom C/C++ 10.0 Compiler"
#endif
#include
#include
#include
#include
#include
#include
#include
char c=1;
int orig_mode=3;
char *pv=(char *)(0x0A0000L);
FILE *fp; char buffer[32];
void PutPixel(int x, int y, char c)
{
*(pv+y*320+x)=c; //put pixel color
}
void InitGraph()//Set 320x200 256 colors Mode
{
union REGS regs;
//Test if it is VGA Adapter.
regs.w.ax = 0x1A00;
int386(0x10, ®s, ®s);
if(regs.h.al != 0x1A)
{
puts("This Program needs VGA Adapter ");
exit(1);
}
// get original video mode
regs.w.ax = 0x0F00;
int386(0x10, ®s, ®s);
orig_mode = regs.h.al;
// set graphic mode 13h
regs.w.ax = 0x0013;
int386(0x10, ®s, ®s);
}
void CloseGraph()
{
union REGS regs;
regs.h.ah = 0x00;
regs.h.al = orig_mode;
int386(0x10, ®s, ®s);
}
void CoutTextxy(int x, int y, int *qwm) //Display Chinese Character String
{
int pos=0;
long addr;
register p;
unsigned char bit;
while(qwm[pos])
{
if(((qwm[pos]>=101)&&(qwm[pos]<=994))||((qwm[pos]>=1601)&&(qwm[pos]<=8794)
{
addr=((long)(qwm[pos]/100-1)*94+(long)(qwm[pos]%100-1))*32; //Calculate
pos++; if(fseek(fp,addr,SEEK_SET))return; //Failed
for(register i=0;i<32;i++)
{
buffer[i]=fgetc(fp);
}
for(i=0;i<16;i++)
{
bit=0x80;
for(register k=0;k<8;k++,bit>>=1)
{
if((buffer[2*i]&bit))PutPixel(x+k,y+i,c);
if((buffer[2*i+1]&bit))PutPixel(x+k+8,y+i,c);
}
}
}
x+=16;
}
}
void main()
{
int x=120, y=60;
char filename[]="hzk16";
int sd[]={4168,2181,5102,4859,2011,0};
if((fp=fopen(filename,"rb"))==NULL)
{
printf("Can't open file %s ",filename);
return;
}
InitGraph();
CoutTextxy(x,y,sd);
c=2; CoutTextxy(x,y+16,sd);
c=3; CoutTextxy(x,y+32,sd);
c=4; CoutTextxy(x,y+48,sd);
getch();
CloseGraph();
fclose(fp);
}
如何顯示漢字
在模式 13H 下, 直接寫屏顯示漢字.
其中 hzk16 是 UCDOS 的字型檔, 把它放在當前目錄下
顯示漢字用的是 區位碼, 稍加修改可變成顯示其它碼.
// Graphics Mode 13h Test, Display a Chinese String, Wildrose Inc.
// Compile it with Watcom C/C++ 10.0 compiler
// Copyright(c) Jan. 1997 ZhangWei
// All rights reserved
#if !defined(__WATCOMC__)' '!defined(__386__)
#error "This Program needs Watcom C/C++ 10.0 Compiler"
#endif
#include
#include
#include
#include
#include
#include
#include
char c=1;
int orig_mode=3;
char *pv=(char *)(0x0A0000L);
FILE *fp; char buffer[32];
void PutPixel(int x, int y, char c)
{
*(pv+y*320+x)=c; //put pixel color
}
void InitGraph()//Set 320x200 256 colors Mode
{
union REGS regs;
//Test if it is VGA Adapter.
regs.w.ax = 0x1A00;
int386(0x10, ®s, ®s);
if(regs.h.al != 0x1A)
{
puts("This Program needs VGA Adapter ");
exit(1);
}
// get original video mode
regs.w.ax = 0x0F00;
int386(0x10, ®s, ®s);
orig_mode = regs.h.al;
// set graphic mode 13h
regs.w.ax = 0x0013;
int386(0x10, ®s, ®s);
}
void CloseGraph()
{
union REGS regs;
regs.h.ah = 0x00;
regs.h.al = orig_mode;
int386(0x10, ®s, ®s);
}
void CoutTextxy(int x, int y, int *qwm) //Display Chinese Character String
{
int pos=0;
long addr;
register p;
unsigned char bit;
while(qwm[pos])
{
if(((qwm[pos]>=101)&&(qwm[pos]<=994))||((qwm[pos]>=1601)&&(qwm[pos]<=8794)
{
addr=((long)(qwm[pos]/100-1)*94+(long)(qwm[pos]%100-1))*32; //Calculate
pos++; if(fseek(fp,addr,SEEK_SET))return; //Failed
for(register i=0;i<32;i++)
{
buffer[i]=fgetc(fp);
}
for(i=0;i<16;i++)
{
bit=0x80;
for(register k=0;k<8;k++,bit>>=1)
{
if((buffer[2*i]&bit))PutPixel(x+k,y+i,c);
if((buffer[2*i+1]&bit))PutPixel(x+k+8,y+i,c);
}
}
}
x+=16;
}
}
void main()
{
int x=120, y=60;
char filename[]="hzk16";
int sd[]={4168,2181,5102,4859,2011,0};
if((fp=fopen(filename,"rb"))==NULL)
{
printf("Can't open file %s ",filename);
return;
}
InitGraph();
CoutTextxy(x,y,sd);
c=2; CoutTextxy(x,y+16,sd);
c=3; CoutTextxy(x,y+32,sd);
c=4; CoutTextxy(x,y+48,sd);
getch();
CloseGraph();
fclose(fp);
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10796304/viewspace-962569/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#漢字轉漢語拼音C#
- C語言程式設計-漢字點陣C語言程式設計
- cmd顯示漢字需要的設定
- 基於Linux核心的漢字顯示的嘗試(轉)Linux
- 讓HEXEDIT2.54顯示漢字(5千字)
- c語言字串,數字轉換C語言字串
- PLSQL中漢字顯示亂碼問題SQL
- C#中漢字轉拼音C#
- 基於Linux作業系統核心的漢字顯示(轉)Linux作業系統
- Linux中顯示FAT等分割槽上的漢字檔名(轉)Linux
- 直接在程式中更改顯示模式 (轉)模式
- STM32開原始碼——OLED漢字顯示程式原始碼
- C# UTF8字串轉漢字C#字串
- 關於在linux中顯示漢字的問題請教大蝦(轉)Linux
- C語言“字串-數字”之間的轉換C語言字串
- 調查顯示,富裕國家流行 Python 和 C 語言Python
- 是否需要漢語程式語言
- C:漢字儲存
- eclipse中的漢字橫著顯示,或顯示不正確,字型大小顏色設定Eclipse
- Jmeter中預設語言的顯示JMeter
- StackOverflow :調查顯示富裕國家流行 Python 和 C 語言Python
- 漢語是最了不起的語言
- java 漢字轉配音Java
- POWERBUILDER KODIGO 框架TOOLBAR不能完全顯示漢字問題解決UIGo框架
- C語言開發漢字應用軟體技術與例項 王小華pdfC語言
- 漢語言處理工具pyhanlp的簡繁轉換HanLP
- dijkstra演算法筆記(C語言實現,顯示路徑)演算法筆記C語言
- C++語言概述 (轉)C++
- Python 設定Admin顯示語言Python
- VSCode設定中文語言顯示VSCode
- C++依次讀取檔案中的漢字並將漢字轉為string型別C++型別
- JS 漢字轉換拼音JS
- UNICODE碼轉漢字Unicode
- 漢字轉拼音pl/sqlSQL
- C#漢字拼音檢索C#
- c語言static關鍵字的理解C語言
- C語言的幾個關鍵字C語言
- C語言---整型字串轉換C語言字串