我现在开发一个程序,首先生成的图片是网格状的,在一个图片框中装载,中心点是固定的,整体呈圆形,然后被由圆心发出的射线和若干个同心圆切分成n个网格状的三角形,现在想要实现点击其中一个网格时,使这个网格的颜色反色,并且获取当前网格的坐标,请问诸位大大,有没有实现的方法,初次接触vc的图片处理,一点头绪都没有,谢谢啦~~~~
先鞠躬啦,呵呵~~~~(*^__^*) 嘻嘻……

解决方案 »

  1.   

    我也没有看太懂 
    感觉上好像是把图像分成了很多份 需要取其中一份的坐标并反色这一份所在的区域。如果是这样的话 就是一个纯数学计算问题了 
    给个提示 用CRgn类将你划分的各个区域保存起来 然后使用PtInRegion来判断鼠标在那个区域当中根据这个区域去找图像中相应的位置 取RGB值进行反色。楼主最好贴一个效果图出来 也好给你验证一下。
      

  2.   

    计算鼠标点落在某一网格的方法举例:
       鼠标坐标相对圆心的坐标为(x,y),圆心(0,0),以射线A和射线B都落在第一扇区为例,(x1,y1)为射线A上一点,(x2,y2)为射线B上一点
       网格的内圆半径为r1,外圆半径为r2,则落在该网格所有点满足以下两个条件:
       1 x的平方+y的平方开根号之后的值大于r1小于r2
       2 y1/x1的绝对值<y/x的绝对值<y2/x2的绝对值(假定射线B在射线A的上方)
       射线落在其他扇区可以类似分析。
    这样你可以找到某个网格中所有所有点的坐标,同样可以分析鼠标所在的网格,找出鼠标落在的网格所有点坐标,把对应的点像素值用255减即可。
      

  3.   

    好的啊,我给贴个图,网格时变化的,随着参数的不同,网格的个数和大小事不一样的,大家可以去我的相册里看看图
    地址:
    http://hi.baidu.com/hbwc/album/%B3%CC%D0%F2
    大家看一下吧!两张图,是两种参数时的图片,网格的密度和大小均发生了变化,图片是matlab画出来的,我只是放到了vc 的图片框中显示,不知道诸位有什么好的办法没有呢?
      

  4.   

    看不到图。
    大概做法就是先确定绘制网格的具体方法,根据鼠标位置确定网格的坐标,创建网格的Rgn,再FillRgn。
      

  5.   

    判断鼠标位置的方法与绘制界面类似,确定是圆周半径和两条边的坐标,然后创建Rgn、FillRgn。
      

  6.   


    模仿 ARC GIS 自己做个三角形类(一个很好复习OOP的机会^^),最好用GDI+做,GDI也行
    class MyTriangle
    {
    private:
      PointF:ptA,ptB,ptC;//3个点
    public:
      BOOL PointFIsIn();//判断1个点是否在此三角形内
      GetAllPtF()://得到该三角形内所有点坐标,用来着色用
    }CList myTriangleList;   //生成一个链表,保存生成的所有三角形1.生成所有三角形,并保存在list中...
    2.根据鼠标得到目标点PtDst,遍历所有三角形,判断目标点PtDst是否在三角形中//当然不用全遍历,根据实际优化
    3.找到目标三角形,得到该三角形内所有点坐标,setPix..........OK