我现在有一个指针
BYTE * Img = new BYTE[iHeight * iWidth];  //对应图像数据区,只是象素的灰度信息然后我对这块内存区域(图像数据)进行了一些图像处理的操作,提取了一个物体的外轮廓,用一个点集:
CPoint *pt表示的,并且知道点的个数ptnum;我想调用MFC里面或者API函数Polygon();来填充Img中的元素;我试着如下操作的,但是没有效果:CBitmap bmp;
CBrush  brush(RGB(0,0,0));
CDC dc;dc.CreateComptableDC(NULL);
bmp.CreateBitmap(iWidth, iHeight, 1, 8, Img);
dc.selectObject(&brush);
dc.selectObject(&bmp);
dc.Polygon(pt, ptnum);可是Img的内容却没有任何变化啊??!

解决方案 »

  1.   

    /* WIN-TC BGI 图形编程模板 */#include "Conio.h"
    #include "graphics.h"
    #define closegr closegraphvoid initgr(void) /* BGI初始化 */
    {int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */
     registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
     initgraph(&gd,&gm,"");
    }
    void seedfilling(x,y,fill_color,boundary_color)int x,y,fill_color,boundary_color;{int c;c=getpixel(x,y); /*获取当前点的颜色*/if((c!=boundary_color)&&(c!=fill_color))  /*如果颜色为边界色则不填充*/{putpixel(x, y, fill_color); /*画点*/
    getch();  /*加上这条语句可以显示填充状态 */seedfilling(x+1,y, fill_color, boundary_color);seedfilling(x-1,y, fill_color, boundary_color);seedfilling(x, y+1, fill_color, boundary_color);seedfilling(x, y-1, fill_color, boundary_color);}}void main()
    {
     int a,b,color; int gd=DETECT , gm;
     int poly[10];
     a=150  ;
     b=140;
     color=4;
     initgraph(&gd , &gm , ""); poly[0] = 110;        /* 第一个点的x坐标以及y坐标 */
     poly[1] = 110; poly[2] = 200;      /* 第二点 */
     poly[3] = 105;
     poly[4] = 170;      /* 第三点 */
     poly[5] = 120; poly[6]=150;        /*第四点*/
     poly[7]=170; poly[8]=110;       /*多边形的起点与终点一样*/
     poly[9]=110;
     drawpoly(5,poly);/* 显示各点连接起来的多边形 */
     seedfilling(a,b,color,15);  /*种子填充多边形*/ getch();
     closegraph();
      

  2.   

    我想调用CDC::Polygon()那个函数,该如何操作呢?简而言之就是我已经知道了一个点集CPoint *pt,和它的个数ptnum;
    我想创建一个CDC的对象dc,然后调用CDC::Polygon();
    最后把画出来的多边形图像转换到一个BYTE指针(buffer)里面,这个buffer里面只有图像的数据信息,并且是灰度图像,每个象素只有8位.大侠指点一下,多谢多谢了。
      

  3.   

    我用种子填充,就按楼上大侠提供的方法,可是那个递归调用到最后居然报出一个错误,说“stack overflow”!
    我晕死啊,哪位能不能帮一下偶啊。好着急,,5555555
      

  4.   

    你的代码并没有在Img上作图,当然Img没有变化了。
      

  5.   

    你在dc里面画的啊,和img没有关系
      

  6.   

    怎样才是在Img上作图了呢???请指点一下,3ks
      

  7.   

    把img画到一个dc上,然后在该dc上作图即可。
    如果该dc是当前客户区的dc,你直接就可以但到效果;
    如果是虚拟dc,就把该dc上的内容拷贝到客户区。
      

  8.   

    http://community.csdn.net/Expert/topic/3713/3713727.xml?temp=.2316553CClientDC Dc(this);
    CBrush cBr(RGB(0, 0, 255));
    Dc.SelectObject(&cBr);
    Dc.ExtFloodFill( 0, 0, RGB(0, 0, 0), FLOODFILLBORDER );