您的位置:首页 > 其它

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

2004-10-15 23:42 330 查看
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等指令执行前,先预先做好坐标的对称转换。显然这种方案比较烦琐,而且效率也比较低。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐