我现在有一个指针
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的内容却没有任何变化啊??!
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的内容却没有任何变化啊??!
#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();
}
我想创建一个CDC的对象dc,然后调用CDC::Polygon();
最后把画出来的多边形图像转换到一个BYTE指针(buffer)里面,这个buffer里面只有图像的数据信息,并且是灰度图像,每个象素只有8位.大侠指点一下,多谢多谢了。
我晕死啊,哪位能不能帮一下偶啊。好着急,,5555555
如果该dc是当前客户区的dc,你直接就可以但到效果;
如果是虚拟dc,就把该dc上的内容拷贝到客户区。
CBrush cBr(RGB(0, 0, 255));
Dc.SelectObject(&cBr);
Dc.ExtFloodFill( 0, 0, RGB(0, 0, 0), FLOODFILLBORDER );