做毕业设计遇到了困难,好心人请进

疯癫小程序 2010-04-23 11:19:41
我选的题目是:基于VC++的纹理分析系统
我现在在看 精通Visual C++数字图像模式识别技术及工程实践 第二版 (求是科技 张宏林 人民邮电)
在看第12章 图像的纹理分析方法
后面的实现代码基本上能看懂,就是里面有个处理位图操作的类CDib搞的我云里雾里
这个类它根本就一点也没有介绍,莫名奇妙的好多函数调用,我怎么知道是什么,而且它里面的好多实现代码都没有注释,叫我怎么看?我原本想这个类肯定是作者从网上档的,但是网上搜一下这个函数,很多,就是没有书上的真个版本。
现在没辙了,看又看不懂,找又找不到

有做过类似毕业设计的高手吗?你们是过来人,应该知道怎么怎么看待这个类啊?需不需要把里面的实现细节弄清楚?还是知道调用接口直接调用就可以了,本科生的毕业设计是怎么要求的?在利用别人网上提供的类是需要很明白里面的实现细节吗?

接下来我把我的这个版本的CDib类贴出来,如果有人知道它的出处请给我一个连接,我好知道怎么利用它的接口
...全文
451 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
SullenSun 2010-04-23
  • 打赏
  • 举报
回复
嗯 遇到问题再说。。
cdsnpeter 2010-04-23
  • 打赏
  • 举报
回复
你的算法是怎么写的?用DIB干嘛?
你应该了解你的算法的输入,输出,这样才可能和UI联系起来。
kier2 2010-04-23
  • 打赏
  • 举报
回复
你的题目是纹理分析,dib类只是一个设备无关位图的相关操作的类,你只需要了解各个函数的作用就可以了,如果有时间,再慢慢研究它吧,其实也不难。
Eleven 2010-04-23
  • 打赏
  • 举报
回复
自己做,遇到问题再来。。。
tanwei1002 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 helonsy 的回复:]
引用 4 楼 xiuxianshen 的回复:
你应该把你的核心算法先弄好,而不是在纠缠这些界面的问题,纯建议

可信算法弄好了,现在只是界面的问题,呵呵。。。。
[/Quote]

算法弄好了 界面自己去弄
发这么多代码 没人看的
疯癫小程序 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiuxianshen 的回复:]
你应该把你的核心算法先弄好,而不是在纠缠这些界面的问题,纯建议
[/Quote]
可信算法弄好了,现在只是界面的问题,呵呵。。。。
xiuxianshen 2010-04-23
  • 打赏
  • 举报
回复
你应该把你的核心算法先弄好,而不是在纠缠这些界面的问题,纯建议
疯癫小程序 2010-04-23
  • 打赏
  • 举报
回复
.cpp续:
BOOL CDib::Save(const char * pzFileName)
{
// BITMAPFILEHEADER bmpFileHeader;
CFile file;
int nBmpFileHeaderSize;

//open and read the DIB file header
nBmpFileHeaderSize=sizeof(BITMAPFILEHEADER);

if(!file.Open(pzFileName,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
goto exit;

file.Write(&bmpFileHeader,nBmpFileHeaderSize);

//allocate memory fail
if(!m_pDib)
goto failure;

//read the dib into the buffer at a time using ReadHuge
file.WriteHuge(m_pDib,bmpFileHeader.bfSize-nBmpFileHeaderSize);

file.Close();
return TRUE;

failure:
file.Close();
exit:
return FALSE;
}

BYTE * CDib::GetBits()
{
//the size of the color map is determined by the number
//of RGBQUAD structures presend.
//it also depends on the bit_depth of the Dib
DWORD dwNumColors,dwColorTableSize;
BITMAPINFOHEADER *lpDib=(BITMAPINFOHEADER *)m_pDib;

WORD wBitCount=lpDib->biBitCount;

if(lpDib->biSize>=36)
dwNumColors=lpDib->biClrUsed;
else
dwNumColors=0;

if(dwNumColors==0)
{
if(wBitCount!=24)
dwNumColors=1L<<wBitCount;
else
dwNumColors=0;
}

dwColorTableSize=dwNumColors*sizeof(RGBQUAD);

return m_pDib+lpDib->biSize+dwColorTableSize;
}

int CDib::GetBiBitCount()
{
if(m_pDib!=NULL)
return ((BITMAPINFOHEADER *)m_pDib)->biBitCount;
return 0;
}
疯癫小程序 2010-04-23
  • 打赏
  • 举报
回复
.cpp文件:
// Dib.cpp: implementation of the CDib class.
//
//////////////////////////////////////////////////////////////////////

#include "StdAfx.h"
#include "Dib.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDib::CDib()
{
m_hDrawDib=NULL;
m_pDib=NULL;
}

CDib::~CDib()
{
Close();
}

void CDib::Draw(CDC *pDC,int nWidth, int nHeight)
{
if(m_pDib!=NULL)
{
ASSERT(IsValid());
DrawDibRealize(m_hDrawDib,pDC->GetSafeHdc(),TRUE);
DrawDibDraw(m_hDrawDib,pDC->GetSafeHdc(),
0, //desktop left
0, //desktop top
nWidth,
nHeight,
(BITMAPINFOHEADER *)m_pDib,
(LPVOID) GetBits(),
0, //source left
0, //source top
((BITMAPINFOHEADER *)m_pDib)->biWidth,
((BITMAPINFOHEADER *)m_pDib)->biHeight,
DDF_BACKGROUNDPAL);
}
}

CSize CDib::GetSize()
{
return CSize(((BITMAPINFOHEADER *)m_pDib)->biWidth,
((BITMAPINFOHEADER *)m_pDib)->biHeight);
}

LONG CDib::GetWidth()
{
return ((BITMAPINFOHEADER *)m_pDib)->biWidth;
}

LONG CDib::GetHeight()
{
return ((BITMAPINFOHEADER *)m_pDib)->biHeight;
}

void CDib::Close()
{
if(m_hDrawDib!=NULL)
{
DrawDibClose(m_hDrawDib);
m_hDrawDib=NULL;
}

if(m_pDib!=NULL)
{
delete m_pDib;
m_pDib=NULL;
}
}

BOOL CDib::Open(const char * pzFileName)
{
// BITMAPFILEHEADER bmpFileHeader;
CFile file;
int nBmpFileHeaderSize;

Close();

//drawdibopen initialize the diradib library and
//returns a handle for all drawdib operations
if(!(m_hDrawDib=DrawDibOpen()))
goto exit;

//open and read the DIB file header
nBmpFileHeaderSize=sizeof(BITMAPFILEHEADER);

if(!file.Open(pzFileName,CFile::modeRead | CFile::typeBinary))
goto exit;

if(file.Read((void *)&bmpFileHeader,nBmpFileHeaderSize)!=(UINT)nBmpFileHeaderSize)
goto failure;

//validate the DIB file header by checking the first
//two characters for the signature "BM"
if(bmpFileHeader.bfType!=*((WORD *)"BM"))
goto failure;

//allocate a big chuck of global memory to store the DIB
m_pDib=(BYTE *)new char [bmpFileHeader.bfSize-nBmpFileHeaderSize];

//allocate memory fail
if(!m_pDib)
goto failure;

//read the dib into the buffer at a time using ReadHuge
file.ReadHuge(m_pDib,bmpFileHeader.bfSize-nBmpFileHeaderSize);

if(((BITMAPINFOHEADER *)m_pDib)->biSizeImage==0)
{
//the application that create this bitmap didn't fill
//in the biSizeImage field. Let's fill it
//in even though the DrawDib * functions don't need it.
BITMAPINFOHEADER *pDib=(BITMAPINFOHEADER *)m_pDib;

//scan lines must be DWord aligned, hence the strange bit stuff
pDib->biSizeImage=((((pDib->biWidth*pDib->biBitCount)+31)&~31)>>3)*pDib->biHeight;
}

m_pDibBits=GetBits();

file.Close();
return TRUE;

failure:
file.Close();
exit:
Close();
return FALSE;
}
疯癫小程序 2010-04-23
  • 打赏
  • 举报
回复
.h文件:
// Dib.h: interface for the CDib class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DIB_H_INCLUDED_)
#define AFX_DIB_H_INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include <vfw.h>
#pragma comment(lib,"vfw32.lib")

class CDib : public CObject
{
public:
CDib();
virtual ~CDib();

//Attributes
public:
BYTE *GetBits();
CSize GetSize();
LONG GetWidth();
LONG GetHeight();
int GetBiBitCount();
BOOL IsValid() { return(m_hDrawDib!=NULL); }
operator HDRAWDIB() { return m_hDrawDib; }

//operations
public:
BOOL Open(const char *pzFileName);
BOOL Save(const char *pzFileName);
void Draw(CDC *pDC,int nWidth, int nHeight);
void Close();

//public parameters
BYTE *m_pDibBits;
//implementation
public:
BYTE *m_pDib;
HDRAWDIB m_hDrawDib;

BITMAPFILEHEADER bmpFileHeader;
};
#endif // !defined(AFX_DIB_H_INCLUDED_)
sld009 2010-04-23
  • 打赏
  • 举报
回复
用opencv算法库啊
wjz748305545 2010-04-23
  • 打赏
  • 举报
回复
接分ing
疯癫小程序 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 tanwei1002 的回复:]
引用 15 楼 helonsy 的回复:
引用 6 楼 tanwei1002 的回复:
引用 5 楼 helonsy 的回复:
引用 4 楼 xiuxianshen 的回复:
你应该把你的核心算法先弄好,而不是在纠缠这些界面的问题,纯建议

可信算法弄好了,现在只是界面的问题,呵呵。。。。


算法弄好了 界面自己去弄
发这么多代码 没人看的

你还兼职做毕业设计啊?做过类……
[/Quote]
您做管理系统浪费人才啊
wltg2001 2010-04-23
  • 打赏
  • 举报
回复
代码太长了,没仔细看,好像是一个处理DIB文件的类,没什么太难的东西,对着MSDN一行行的看也用不了一天就看明白了。
wangyingyingqq 2010-04-23
  • 打赏
  • 举报
回复
楼主,我现在也是做VC方面的图像设计,我的题目是基于VC++的图像处理软件设计,和你的有点像,是对衣服图像进行一些基本处理,通过摄像头采集图像的,不过我也不懂,现在遇到一个要用这个摄像头实现拍照的功能就卡这儿了呵呵
tanwei1002 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 helonsy 的回复:]
引用 6 楼 tanwei1002 的回复:
引用 5 楼 helonsy 的回复:
引用 4 楼 xiuxianshen 的回复:
你应该把你的核心算法先弄好,而不是在纠缠这些界面的问题,纯建议

可信算法弄好了,现在只是界面的问题,呵呵。。。。


算法弄好了 界面自己去弄
发这么多代码 没人看的

你还兼职做毕业设计啊?做过类似的吗?
[/Quote]

图形图像类毕业设计没做过,一般是管理系统类的毕设做得多点
这不是鸭头 2010-04-23
  • 打赏
  • 举报
回复
/*
* diblib.h
*
* Copyright (c) 1991 Microsoft Corporation. All rights reserved
* Modified (m) 1996 Alessandro Iacopetti
*
* Header file for Device-Independent Bitmap (DIB) API. Provides
* function prototypes and constants for the following functions:
*
* BitmapToDIB() - Creates a DIB from a bitmap
* ChangeBitmapFormat() - Changes a bitmap to a specified DIB format
* ChangeDIBFormat() - Changes a DIB's BPP and/or compression format
* CopyScreenToBitmap() - Copies entire screen to a standard Bitmap
* CopyScreenToDIB() - Copies entire screen to a DIB
* CopyWindowToBitmap() - Copies a window to a standard Bitmap
* CopyWindowToDIB() - Copies a window to a DIB
* CreateDIBPalette() - Creates a palette from a DIB
* CreateDIB() - Creates a new DIB
* DestroyDIB() - Deletes DIB when finished using it
* DIBHeight() - Gets the DIB height
* DIBNumColors() - Calculates number of colors in the DIB's color table
* DIBToBitmap() - Creates a bitmap from a DIB
* DIBWidth() - Gets the DIB width
* FindDIBBits() - Sets pointer to the DIB bits
* GetSystemPalette() - Gets the current palette
* LoadDIB() - Loads a DIB from a file
* PaintBitmap() - Displays standard bitmap in the specified DC
* PaintDIB() - Displays DIB in the specified DC
* PalEntriesOnDevice() - Gets the number of palette entries
* PaletteSize() - Calculates the buffer size required by a palette
* SaveDIB() - Saves the specified dib in a file
* DIBPixelAddress()
*
* See the file DIBAPI.TXT for more information about these functions.
*
*/
疯癫小程序 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tanwei1002 的回复:]
引用 5 楼 helonsy 的回复:
引用 4 楼 xiuxianshen 的回复:
你应该把你的核心算法先弄好,而不是在纠缠这些界面的问题,纯建议

可信算法弄好了,现在只是界面的问题,呵呵。。。。


算法弄好了 界面自己去弄
发这么多代码 没人看的
[/Quote]
你还兼职做毕业设计啊?做过类似的吗?
疯癫小程序 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xyzhaopeng 的回复:]
你的算法是怎么写的?用DIB干嘛?
你应该了解你的算法的输入,输出,这样才可能和UI联系起来。
[/Quote]
用DIB提取位图信息和显示位图啊。。。。
ljluck7687 2010-04-23
  • 打赏
  • 举报
回复
买冰箱回来,能学会用就可以了,至于冰箱里面的技术细节没有必要去搞懂。
已封装好的类,就如同做好的冰箱,只要知道调用就可以了,里面的细节不要去看
加载更多回复(2)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧