当前位置:  技术问答>linux和unix

字符显示的原理

    来源: 互联网  发布时间:2016-08-08

    本文导语:  操作系统里字符是怎么通过编码转换成显示器里出现的图像的?这个图像存储在什么地方?是什么格式的?如果是图片那是矢量图么?还有,如果字体只是一个一个的图片,那像WORD这种软件是怎么平滑地调整字体的...

操作系统里字符是怎么通过编码转换成显示器里出现的图像的?这个图像存储在什么地方?是什么格式的?如果是图片那是矢量图么?还有,如果字体只是一个一个的图片,那像WORD这种软件是怎么平滑地调整字体的排版的呢?我的意思是,我觉得字体如果是图那也应该是一种特殊的可以调整具体显示细节的图片吧? 
我之所以想起这个问题是因为我想做一个考试打小抄时把小抄转换成一种容易读懂的编码的程序,方便我以后打小抄。我知道这些东西做这个程序基本是用不上的,但是我突然很想知道这些细节。 

|
OS可能只是维护了一个视频缓冲区,按照约定的格式排满如1024x768的像素信息,最后由驱动程序将其转换为视频信号


那像WORD这种软件是怎么平滑地调整字体的排版的呢
-------------
这是更高层次的问题,不是OS解决的。理论上只要OS提供一个画点的api,应用程序就能利用这个api构建出魔兽这样精彩的显示效果

|

字体文件有两种,一种是点阵字符,用点阵描述的图形图像,"二"这个字是用1010表示的,如果是1,当前点就填充
还有一种是ttf文件,你可以打开C:WindowsFonts里面,系统的字体全部在里面,ttf的字体是矢量图形,笔画是用几个点描述的,几个点用贝塞尔曲线描绘.字体文件的格式很复杂,我只是看过一个java解析的应用程序.
另外字符编码是另外一回事,比如一个"二"字,你可以用utf-8编码存储,那么会占用8+8+8=24位是3个字节,如果用到是utf-8会占用两个字节,如果是gb2312那么也是16位1010的二进制代码,也就是2个字节,譬如gb2312可以表示6000个中文字体,每个字体是一个编码,"二"的编码是3b,5f(例子,没有查过)那么根据gb2312的区位,可以到点阵字符字体库里面找偏移量,反正就是找到这个字的"形状描述的数据",根据这个数据,画出点阵字符
ttf的矢量字体也是一样的,只是用了数学计算,画出这些笔画数据.

中文的显示比较复杂,英文只有26个字母,8859_1是最早的拉丁语系字符集,呵呵原理都是编码隐射.
很多乱码问题,就是字符集惹得祸,java里面都是8859_1和unicode这两种编码.统一的,呵呵

    
 
 

您可能感兴趣的文章:

  • 想知道chinaren校友录留言的字符认证原理
  • redhat linux 7.1 字符方式下(not xwindown/kde)汉化如何实现?? ucdos汉字输入、显示的原理??分不够可在加!!!
  • jQuery截取指定长度字符串的实现原理及代码
  • 如何在windows下的DOS窗口中显示utf-8字符(CMD命令提示符终端显示utf-8字符)
  • 如何使GDB显示完整的字符串变量,当字符串比较长时。
  • windows下cmd命令行显示UTF8字符设置(CHCP命令)
  • 为什么我的JBuilder5编辑器光标显示位置与字符显示位置不一致?如何设置?
  • Linux/CentOS/fedora下vim显示的字符编码设置
  • 请问从屏幕上输入字符时,能显示别人看不出的原字符,也就是怎么实现加密。这程序该怎么写,谢谢。
  • 字符串中带有空格,在jsp的text框里显示的时候会把空格后面的字符串都删掉
  • 在<textarea>中输入的字符串 getString 是有换行符的,但用sendmail发送这个getString 后,在邮件中显示的这个字符串里的所有换行符全不
  • 有个JLabel比如说大小为(200,100),而又有个字符串,其长度超过200,给如何在JLabel上显示完字符串的内容呢
  • 终端中的中文字符无法显示
  • 请问:界面不显示中文字符问题
  • telnet 为什么不能显示curses中的连续的字符
  • VMware Workstation Linux虚拟机汉字字符显示的问题
  • redhat9,在console模式下如何显示中文字符?
  • 为什么启动uclinux后键盘输入的字符与超级终端上显示的不一致
  • CentOS系统,如何设置字符编码,显示中文
  • UNIX下,如何输入一个字符让其显示为 *
  • 关于LINUX下图形界面显示字符的疑问
  • 怎样在linux的字符界面下正确的显示汉字??
  • 简单的字符输入显示问题
  • 如何在点阵lcd上显示字符?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Strings(字符串) 成员 size():返回字符串中字符的数量
  • 关于字符串的操作,我想得到字符串的长度,和他开始两位组成的新的字符串,例如::
  • C++ Strings(字符串) 成员 c_str():将字符串以C字符数组的形式返回
  • 请问怎样判断一个字符是中文字符还是英文字符?(空)
  • C++ Strings(字符串) 成员 find():在字符串中查找字符
  • C语言实现输入一个字符串后打印出该字符串中字符的所有排列
  • 编程语言 iis7站长之家
  • 用Java正则去掉字符串中重复出现的字符
  • C++ I/O 成员 ignore():读取字符并忽略指定字符
  • 字符字符串加法问题?
  • C++ Strings(字符串) 成员 copy():将内容复制为一个字符数组
  • 怎样去掉字符串中的tab字符?
  • C++ Strings(字符串) 成员 rbegin():返回一个逆向迭代器,指向最后一个字符
  • 如何将一个双引号”放在一个字符串中,就是在字符串中如何转义一个双引号。谢谢!
  • C++ Strings(字符串) 成员 empty():如果字符串为空,返回真
  • php判断字符串在另一个字符串位置的方法
  • C++ Strings(字符串) 成员 begin():返回一个迭代器,指向第一个字符
  • 请教,有关16进制字符串形成2进制字符串的问题!
  • C++ Strings(字符串) 成员 data():返回内容的字符数组形式
  • crtl+alt+F1一直到F6都可以从图形到字符,那么,这和纯粹的字符界面有什么区别,也就是该/etc/initab的值为3后进入的字符界面?
  • C++ Strings(字符串) 成员 length():返回字符串的长度
  • 请问如何判断字符串中的字符在a~z之间


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3