传统设备上下文过于粗糙

时间:2010-01-07 19:17:43

标签: c++ winapi graphics mfc device-context

我有一个过程控制系统。它有一个巨大的2D工作空间,所有的逻辑布局。 2D工作空间是坐标系。 您通常不会立即看到整个工作区,而是一些缩小的部分专注于受控过程的某些部分。这些子系统视图被添加到预定义的命名图像(Power Generator1,柴油发电机,主润滑泵等)中。

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

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

绘制的线条
DC.MoveTo(1,1); 
DC.LineTo(1,2);

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

我考虑过以下选项: *加载并显示预定义图像时,请创建具有更佳分辨率的设备上下文。那么问题就是其他图形提供者使用旧的逻辑单元与它进行交互,当使用旧的逻辑单元时,这会导致图形元素过小和移位。

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

  • 是否可以有两个具有不同逻辑/设备单位比率的DC?并将它们都渲染到屏幕上?

我提到过,即使圆的位置和半径受到限制,圆也会以一个像素宽度精美呈现。即使端点只能以粗略坐标给出,垂直线也会渲染得很漂亮。这使我相信技术上可以在DC逻辑坐标中仅以小数形式描述的区域中进行绘制。

有没有人知道该怎么办?

2 个答案:

答案 0 :(得分:1)

您需要扩展模型,而不是设备上下文。

答案 1 :(得分:1)

您可以在新窗口中将高清图像绘制到另一个DC,并将该窗口放在低分辨率绘图上。当然,你必须自己处理剪辑。