24位图提取轮廓,轮廓提取的出来,只是结果失真,竟然出来两个轮廓,并且有一个还左一半,右一半,我的代码如下:(只要建一个工程ReadBitmap,然后把代码粘到OnDraw里面就可运行了)
void CReadBitmapView::OnDraw(CDC* pDC)
{
CReadBitmapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
struct BmpData
{
BYTE BLUE;
BYTE GREEN;
BYTE RED;
}; BmpData dt;
CBitmap b;

CFile f;
CFileException* pError=NULL; f.Open("E:\\OpenGLDemo\\ReadBitmap\\DXFExprt(16 ).bmp",CFile::modeRead|CFile::typeBinary,pError);
f.Read("E:\\OpenGLDemo\\ReadBitmap\\DXFExprt(16 ).bmp",CFile::modeRead); BITMAPFILEHEADER bh;
BITMAPINFOHEADER bo;
int width;
int height;

f.Read(&bh,sizeof(bh));
f.Read(&bo,sizeof(bo));

width=bo.biWidth;
height=bo.biHeight;
int x,y;
x=1;
y=height;
BmpData temp,temp1;


while(f.GetPosition()!=f.GetLength())
{

//读红绿蓝颜色分量
f.Read(&dt.RED,sizeof(BYTE));
f.Read(&dt.GREEN,sizeof(BYTE));
f.Read(&dt.BLUE,sizeof(BYTE));
temp=temp1=dt;

//如果x%width==0表示已经读完一行,则y轴坐标减1,x轴置为1
if(x==width)
{
x=1;
y--;

}
else
{
x++;
f.Read(&dt.RED,sizeof(BYTE));
f.Read(&dt.GREEN,sizeof(BYTE));
f.Read(&dt.BLUE,sizeof(BYTE));
if(temp.RED!=dt.RED||temp.BLUE!=dt.BLUE||temp.GREEN!=dt.GREEN)
{
pDC->SetPixel(x,y,RGB(temp1.RED,temp1.GREEN,temp1.BLUE));
temp=dt;

}
}
} f.Close();}