以前用过一些放大程序,包括windows自带的放大镜,还有zoomit等程序,
其主要功能都是把整个屏幕上鼠标位置处的图像进行放大,以方便眼神不好的人看。
做的差的就是直接点阵放大,好一点的会加点防锯齿的算法,看起来舒服些,
可是,当我看到了这个软件。。ZoomText的时候,
我真的几乎不敢相信自己的眼睛了:这个软件居然把屏幕上所有出现文字的地方都无锯齿的放大了!
一开始以为是这个软件的防锯齿算法比较好,但后来仔细看了下,确实是矢量放大!
真不知道怎么能做到这样,真是太神奇了。老外对技术的理解和实现真是让人佩服,技术无止境啊。

解决方案 »

  1.   

    说一下我的思路不知道对不对
    这应该是类似于词典软件的取词吧,HOOK了ExTextOut函数,然后强制放大的地方重绘,修改ExTextOut输出的文字大小,这样就不会出现缩放失真了
      

  2.   

    软件是zoomtext,现在的版本好像是9.13把屏幕上的局部进行放大,如果是图形则等比例放大,如果是文字会矢量放大。zengjiestc:
    ExTextOut函数好像不能定义文字大小的吧?
      

  3.   

    zoomtext 网上找了一找。
    很有名呦。
    自己什么时候学到设计这样软件的程度?
    学习中
      

  4.   

    又研究了一下,如果按照zengjiestc 的思路来做,大概要hook的函数至少应该包括:
    CreateFont:用来在创建字体的时候就放大
    ExtTextOut:修改Textout的坐标,因为窗口放大后坐标也会发生变化
    我觉得窗口放大了以后计算坐标位置是不太容易的。
    另外可能还需要别的函数,暂时想不出来。
      

  5.   

    使用ExTextOut的时候不是有HDC参数吗,可以使用GetTextMetrics获取字体信息嘛
      

  6.   


    图像中的文字不可能无损放大的。
    理论上唯一可行的方法是先OCR出来,然后矢量放大,然后覆盖在原来的文字上。实现的可能性基本为零。
    谁要是能实现这个功能,我把我第三个女朋友让给他,嘿嘿
      

  7.   

    以前 vbgood 论坛还有放大镜程序的比赛呢  我有他们比赛的程序。
      

  8.   

    他们有能够做到文字矢量放大的吗?可否发份给我学习一下:sodar at 126.com刚才特地试了一下,又一次被小小的震了一下:
    滚动的文字可以实时无失真放大,网页中的动画可以实时放大,而且在用kmplayer播放文件的窗口也能实时放大!
    放大时CPU占用在10-20%之间。
      

  9.   

    http://www.vbgood.com/viewthread.php?tid=48309&extra=page%3D1&page=1   这里有很多个 应该都是点阵放大的 
      

  10.   

    下了研究了一下,发现他对图片中的文字可能用了OCR,文字旁边的图象马赛克严重,但是笔划却不是这样,不过可能识别不出字体,放大的效果有点怪怪的。
    还有他的放大窗口可能是用了DirectX,截屏是截不到他放大窗口的,因此他可以捕捉放大窗口下的东西。
      

  11.   

    矢量字体放大了本来就没有锯齿的阿。截取text内容,然后指定新的字体在自己的窗口里重新画出来不就得了?关键是要注意,文字没有锯齿,但是像对话框边框这种元素是否也没有锯齿?
      

  12.   

    这个在驱动级实现非常简单。印象中N卡的驱动程序中貌似就附有这个功能(多显示器的情况下)。文字输出截获、识别是不可能的。这一套早就过时了,而且性能差、实时性差、系统兼容度也很差。通过写视频驱动程序,这些过程反而变得非常简单。 步骤如下:
    1.  创建 Image driver。 镜像驱动会获得当前显示输出的实时拷贝,注意,不是像素拷贝,而是所有GDI操作的重复,所以镜像和实际显示完全一致而且非常高效。感兴趣的可以查一下显卡的镜像驱动方面的文章。2.  恰当的根据放大区域和放大倍数,设置一下世界变换就可以了。
    ps.
        镜像驱动只在2000以上的系统中才支持,如果你把它装在98或者NT上,还能这么快的话,那才真有两下子。
    pps.    采用镜像驱动完全是为了简单和方便。当然,借助于驱动级的介入,效率肯定比较高点。 至于 文字 的 矢量缩放嘛, 呵呵,那纯属TTF字体所产生的副作用而已。跟它本身一点关系都没有。 不信你文字输出用 .fon 字体而不是 TrueType字体 看看。
      

  13.   

    楼上的说的是mirror driver么?
      

  14.   

    貌似直接把系统DPI调高,也是这种情况,字体清晰放大,图标有马赛克。只是要把文字放大的话,把DPI弄上去不就得了?
      

  15.   


    也许这位弟兄的说法是正确的。以前没有做过mirror driver方面,刚才在网上查了一下资料,觉得如果要实现这种功能,mirror driver确实是一种好的方法。
    不知道whoo是否可以介绍一些这方面的开发资料或者网站?
     
      

  16.   

    to codewarrior: 咳咳,人老啦,记忆不行了。 是 mirror driver。to sodar: mirror driver 在 DDK中有详细的介绍、说明和例子。其他的资料网站什么的都是多余的。
      

  17.   

    金山词霸的钩子+GDI绘制,不要太大惊小怪,^_^
      

  18.   

    不好意思,国庆节回家了,没有及时揭帖。
    关于进一步讨论,请移步到:
    http://topic.csdn.net/u/20081014/13/3feea5b3-25b2-4050-bbf8-e6a5712403f5.html