Hebrew语言系统下WMF图片的显示问题及解决方案。

1.Right To Left语言:
 
    Hebrew(西伯来文)是一种Right-To-Left的语言系统。坐标系统与常见的Left-To-Right相反,屏幕右上角是坐标(0,0),自右向左X坐标值增加,自上而下,Y坐标值递增。
                                
                                                           x(800,0)
                                                            <----------------------------|-  (0,0)
                                                                                                    |
                                                                                                    |
                                                                                                    |
                                                                                                    | y
                                                                                                   /|/ (0,600)    



    在这种坐标系统下,文字显示和图片显示与一般的系统是不一样的,内存中的字符串,"Hello World",在这种系统下的显示是:

                                                                                                                                                           World Hello





    同理,由于坐标系统的关系,一些常用的绘图函数也与Left-To-Right系统变得左右对成,比如画一条从(0,0)到(800,600)的直线,在800×600显示器下,Left-To-Right系统下大致如下:

                         (0,0)    *
                                             *
                                                     *
                                                             *
                                                                      *
                                                                               *
                                                                                         *
                                                                                                   *(800,600)

                                                           
而在Right-T- Left系统下则变成了

                                                                                                    *(0,0)
                                                                                          *
                                                                                *
                                                                      *
                                                            *
                                                  *
                                       *
                           *(800,600)                                          
                                
当然,我这里讨论的是以打点的方式绘图,如果使用系统提供的BitBlt等函数,直接操作显卡,那么Right To Left的语言系统是不会起作用的。 
 
2.WMF图片格式:
 
    WMF是微软发行的一种矢量图片格式,全称是Windows Metafile。这是一种矢量图片格式,与一般的象素图片格式最大的区别在于,WMF文件内保存的并不是一个个象素点的RGB值,而是一系列的动作指令,比如LINE,CIRCLE,FILL等,将这些指令组合在一起,便可以形成一幅图片。
    关于WMF的详细信息,可以参考微软的技术文档。
 
3.WMF图片格式在Right-T- Left语言系统下的显示问题:
 
    由于WMF是由一系列绘图指令组成,在Right-To- Left系统下,绘制时每一个动作都与Left-To-Right系统左右对称,自然便导致了整个图片与Left-To-Right系统下的图片完全左右对称.
    其实,在Right-To-Left系统下,不仅仅WMF图片有这个问题,BMP,GIF图片也存在同样的问题,只不过一般系统绘制BMP,GIF等图片格式时,都是直接调用系统提供的bitblt类型的函数,从而直接操作显存,而不是用打点的方式绘图,所以一般不会造成错误。
 
4.解决方案:
    基于以上讨论,可见最可行的解决方案就是在绘制WMF图片时,先创建一个内存位图,将WMF的图片内容绘制到改内存位图,然后调用系统提供的BitBlt类型的函数一次绘制到窗口。
    另一种解决方案是,手动控制整个绘制过程,在LINE,CIRCLE等指令执行前,先预先做好坐标的对称转换。显然这种方案比较烦琐,而且效率也比较低。   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值