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等指令执行前,先预先做好坐标的对称转换。显然这种方案比较烦琐,而且效率也比较低。
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等指令执行前,先预先做好坐标的对称转换。显然这种方案比较烦琐,而且效率也比较低。
相关文章推荐
- FCKeditor上传图片显示叉叉的问题的解决方案
- Android 保存图片到系统及相关问题的解决方案
- Android 保存图片到系统及相关问题的解决方案
- wpf image控件循环显示图片 以达到动画效果 问题及解决方案
- Android 保存图片到系统及相关问题的解决方案
- 关于从相册取出图片后,图片不能按原来角度显示的问题解决方案
- zabbix 2.4 设置中文语言 图片显示中文问题
- 对于office2007图片不显示问题的解决方案
- Android 保存图片到系统及相关问题的解决方案
- 解决三星调用系统相机拍照显示图片旋转90度横着的问题
- 解决WIN10系统Eclipse中图片显示乱码问题
- FileUpLoad选择图片后,直接将图片显示在image中。及IE8本地路径("C:/fakepath/")出现问题的解决方案
- win8以上windows系统eclipse环境下图片显示乱码问题解决
- 解决TextView长按(复制,剪切,粘贴等)显示英文问题(系统语言为中文)
- 黑莓ECLIPSE3.5开发环境不识别资源文件导致编译不通过解决方案附文件(系统语言问题)
- 终结解决方案:Struts2整合JasperReport预览HTML格式不显示图片问题解决方案
- 关于fancybox大图片显示位置不准确的问题解决方案
- 牛腩新闻发布系统-母版页图片不显示问题
- 在UWP中使用RichEditBox只读时图片显示问题(最后有关于RichEditBox颜色问题的解决方案)
- Android 保存图片到系统及相关问题的解决方案