装修专题 > 装修预算报价大全 > 255㎡装潢改造
  • 如何改造 Linux 虚拟终端显示文字

    要想控制台能支持汉字显示,需要解决 3 个问题:  必须使用 UTF-8 模式 ( 默认 vc->utf=1 即可 )  虚拟控制台的 vc_screenbuf 必须修改以为 glyph 提供至少 16bit 的空间。  图形控制台需要 vc_font包含更多的字符,不只是 255 个,并提供代码绘制双倍宽度的中文字形,字体中的字符按照 UNICODE 排列,这样 glyph 就是字符的 UNICODE 编码。  修改虚拟控制台  一开始,我的打算是 vc_screenbuf 修改为 unsigned long long* 类型,32bit 给字符属性,分别表示 16bit 终端前景色和背景色。glyph 则拥有 31bit 的空间 , 因为汉字的宽度为双倍的英文字母 ,其中 1 bit 用来表示双字符宽度。比如 '我' 会表达为 两个 '我',第二个'我'的最高位为 1:绘制任何字形的时候,只绘制字形的左半部分;如果发现最高位为 1 则绘制字体位图中的右半部分。这样同样的绘制代码可以适应英文字母和汉字。写入 vc_screenbuf 的时候, 如果是双倍宽度的字符,需要同时写入两份,第二份的最高位置 1 就可以。但是 vc_screenbuf 的格式已经被到处假定为每字符两个字节。如此修改导致牵一发动全身。许多艰涩难懂的代码都依赖 vc_screenbuf 是 每字符两个字节的设定,直接修改定义后,光是编译器能直接检测出来的就有百余个地方需要修改,还有更多的逻辑并不能被编译器检测出来。如此修改的后果就是会出现许多隐晦的错误,非常难于调式。挣扎后,为最终选择了另一条道路 :  为汉字重新分配一块 vc_unicode_screenbuf  vc_unicode_screenbuf 紧挨着 vc_screenbuf , 事实上 vc_screenbuf 在分配空间的时候,多分配了一倍的空间,多分配的空间充作 vc_unicode_screenbuf,因此 struct vc_data 里并没有添加 vc_unicode_screenbuf 成员。 vc_unicode_screenbuf 同样为每字符 2 个字节,并不包含字符属性,所以 2 个字节如数用来保存 glyph。vc_screenbuf 格式未变,所以 vgacon 不需要修改,这就减少了大量的工作量。向 vc_screenbuf 写入字符的时候,同时写入一份到 vc_unicode_screenbuf 。如果是汉字,由于其 glyph 大于 254 , 所以 vc_screenbuf 的那两个字符 ( 汉字双倍宽度 ) 实际写入的是 0xff 和 0xfe ( 故而上文提到是 glyph 大于 254 的字符 ,0xfe 被保留它用了 )。0xff 表示该字符的 glyph 要到 vc_unicode_screenbuf 提取,然后绘制左半部分;0xfe 表示该字符的 glyph 要到 vc_unicode_screenbuf 提取,然后绘制右半部分。对于 glyph 大于 254 但是又不是双倍宽度的字符,就不需要 0xfe 作陪了。比如屏幕上显示的文字是黑底白字的 “牛 B” , vc_screenbuf 的内容就是 “0x00ff, 0x0ffe, 0x0f42 ” , vc_unicode_screenbuf 的内容则是 “牛 , 牛 ,b” 。这是因为一个汉字为两倍的英文字母宽度。在屏幕文字缓冲区上也必须占用两个字符的位置。并且必须有一种机制能知道应该绘制左半部分和右半部分,我使用的就是 0xff 和 0xfe。  修改图形控制台绘制代码  要修改的地方只有 3 个。  struct console_font 添加 charcount 成员。将主线内核的字体设置为 charcount = 255。 主线内核带的字体都是 255 个 glyph 的,所以没有添加字符个数的必要。不过我们即将要添加的字体会有数万字符。  添加一个新的字体,复盖 UNICODE BMP 基本区域的所有符号。  修改字符绘制代码,添加 vc_unicode_screenbuf 的支持。  字符绘制代码的修改比较繁琐,代码分布在 drivers/video/console/ 下的多个文件中。fbcon_putc(s) 由由 vc->vc_sw->con_putc(s) 调用, fbcon_putc(s) 转而调用分散于 drivers/video/console/ 的多个 puts 实现。因为终端要支持 console_rotate , decoration , timing , 故而每种模式下的绘制实现都是不同的。我拿 drivers/video/console/bitblt.c 最常用的不倾斜、不加装饰等的终端模式为例来讲解绘图部分的修改。由于中文字体为 16x16 点阵,是对齐的字体,故而其绘制代码为 bit_putcs_aligned() 原先的代码以 glyph 为下标到 vc->vc_font->data 获得字体数据,然后调用 fb_pad_aligned_buffer 执行块拷贝操作。我的修改很简单,原来获得字体数据的代码修改后放入 font_bits() 辅助函数。 在 font_bits 里,要判断 glyph 是否为 0xff 或者 0xfe, 如果不是,使用 glyph 为下标获得字体的左半部分后并返回。 如果是,则从 vc_unicode_screenbuf 获得真正的 glyph 数值,然后再依据现有的 glyph 是 0xff 还是 0xfe 去获得字体的右半部分还是左半部分返回。font_bits 获得字体数据后执行 fb_pad_aligned_buffer 块拷贝。需要修改的地方还有 drivers/video/console/fbcon_ccw.c fbcon_cw.c fbcon_ub.c 。依原理进行修改即可。
  • 255平大户型越式别墅 开放式设计空间秀

    255平大户型越式别墅 开放式设计空间秀

    255平大户型越式别墅 开放式设计空间秀  车库与门厅统一设计  本住宅坐落于越南的西贡胡志明市,占地约255平方米。是为一家带有三个孩子的夫妇专业设计的。本建筑将会给您呈现全新的视觉感受,站在时代的前沿, ...
  • 玄关装潢 玄关装潢图片

    玄关装潢 玄关装潢图片

    创意门内哲学 5种玄关风格转换  玄关的设计要依据房型而定,可以是圆弧型的,也可以是直角型的,有的房型还可以设计成玄关走廊。如果玄关空间较小,一般的设计思路是在侧对门的墙上安置几幅入墙镜,加深视野以扩展 ...
  • 榻榻米装潢_榻榻米装潢全攻略

    榻榻米装潢_榻榻米装潢全攻略

    舒适100网讯 如今,榻榻米越来越受广大消费者的喜爱,它既可以设置在客厅与卧室里,还可以设置在阳台里。由于榻榻米具有舒适与实用的特点,所以许多人选择在家里装修一个榻榻米。不过榻榻米装修并不是想象中那么简单 ...
  • 装潢装饰 装潢装饰主要概念

    装潢装饰 装潢装饰主要概念

      装潢装饰是什么呢?装潢装饰的主要概念又是怎样的呢?了解装潢装饰的概念,对于我们的装潢装饰是有益无害的,走进一起装修网,和一起装修网小编一起探讨装潢装饰,装潢装饰主要概念的相关内容,也希望今天的内容 ...
  • 正飞装潢 正飞装潢质量

    正飞装潢 正飞装潢质量

    装修公司的选择对于家中的装修来说是十分重要的,装修公司的好坏将决定着以后家中的装修质量的好坏和居住的舒适程度,所以一定要十分慎重的来选择装修公司。那么,这么多的装修公司中,哪一家装修公司才是比较好的呢 ...