代码之家  ›  专栏  ›  技术社区  ›  Tormod

旧设备上下文太粗糙

  •  0
  • Tormod  · 技术社区  · 15 年前

    我有一个过程控制系统。它有一个巨大的二维工作空间,所有的逻辑都在那里布置。 二维工作空间是一个坐标系。

    此工作区与许多传统的MFC软件组件交互,这些组件单独向工作区贡献图形(设备上下文传递给所有贡献者)。

    现在,其中一个软件组件将AutoCAD图形渲染到曲面上。但是,设备上下文的分辨率不足以处理此作业的详细信息。不幸的是,设备上下文逻辑分辨率是由我们自己的坐标系决定的,在高缩放级别下,坐标系与设备单位(像素)有很大不同。 例如,使用

    DC.MoveTo(1,1); 
    DC.LineTo(1,2);
    

    .... 实际上,即使它只是通过一个逻辑单元的增量直接绘制到设备上下文中,也会在屏幕上覆盖相当长的距离。但线条的宽度仍然只有一个设备像素。圆看起来分辨率很高,但其数据(中心点和半径)只能粗略递增。

    *加载和显示预定义图像时,请创建分辨率更适合的设备上下文。问题是其他图形提供者使用旧的逻辑单元与之交互,当对新的DC使用时,会导致图形元素太小和移位。

    • 我想知道我是否可以创建一些DC包装器,通过不同的api接受这两种坐标,然后在内部将它们转换为高分辨率坐标。

    • 是否可以有两个逻辑/设备单元比率不同的DCs?把它们都呈现在屏幕上?

    我提到了一个圆被渲染得很漂亮,只有一个像素的宽度,尽管它的位置和半径是受限制的。垂直线也渲染得很漂亮,即使端点只能用粗略的坐标表示。这使我相信,从技术上讲,可以在一个区域中画出一个在DC中逻辑坐标只能用小数来描述的区域。

    有人知道该怎么做吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Hans Passant    15 年前

    您需要缩放模型,而不是设备上下文。

        2
  •  1
  •   dwo    15 年前

    您可以将高分辨率图像绘制到新窗口中的另一个DC,并将该窗口放置在低分辨率图形上。当然你得自己动手剪。