MFC下如何实现任意形状的截取?

来源:百度知道 编辑:UC知道 时间:2024/06/16 15:33:01
比如我在图片上画了一个斜着的矩形, 我想截取这个矩形,再正过来,保存。请教达人应该如何实现??最好能有程序 或者告知几个能有用的函数

很简单的嘛。首先要清楚斜的矩形是如何画出来的,好像没直接的函数吧,最简单的应该是MoveTo(...),LineTo(...)画四条线,记录下这四个点。要想正过来嘛,你说的条件不够完善你应该确立一个定点,就是说,正过来后和原来的图形重合有一个点是没动的,这样才能确定你的矩形的位置。当然你也可以正过来放到很远的其他地方,但一定要给出这个定点的位置才能绘制。根据你的正的条件计算正过来的矩形的顶点坐标,用函数 Rectangle(
int x1,
int y1,
int x2,
int y2
);
绘制就可以了。保存,只需保存这左上角和右下角的坐标就可以了,在view类ondraw函数中仍然用rectangle函数绘制。

没做过这种问题,但考虑了一下。提供一个思路。

截取:不知道你的矩形是矢量图吗?截取的话,应该只要得到矩形四个顶点的坐标就可以了。

纠正:你的前提是“斜”的矩形,那么说明你的“正”的标准已经确定了。首先得明确怎么才算是“正”。“纠正"的思路你可以考虑让图形绕某一个“定点”旋转,即让四个“顶点”绕另外一个固定点做一个角度@的旋转。然后和你的“正斜”标准匹配。

保存:略。

这个问题,确切的说,不太明确。

如果你的矩形是你设定的某种数据结构,或者就象某种控件一样,比如在Word里面画个矩形,你可以任意旋转它...那么,你不需要截取它,只要设计好“矩形”这个数据结构有关的成员方法,就能够实现“截取”功能。

如果你的矩形是纯粹的图形,或者说位图,要想获得这个矩形,就必须先计算出另一个矩形,该矩形是可以包容要被截取的矩形的最小的矩形。就是能把它套住的最小矩形。计算出来之后,在获取数据,然后进行相应的计算,可以对它进行任何变换。

利用文档视图结构,在文档中设置存储查询信息,在视图中画,画出的图形

在CYourdoc类中定义
CPtrArray m_arrPFigures;//定义图形矩阵保存信息;

在CYourdoc类中建立自己的函数查询在视图中矩形图形的位置信息