您的位置:首页 > 其它

如何在vc中读入一个文件夹里面的所有图像

2009-06-02 10:39 225 查看
1:

CString strDir;//储存文件夹路径

CFileFind ff;

......... /* 获取文件夹路径*/

strDir+="*.*";//如果是只需要某种文件,怎么替换应该很简单了吧

BOOL res =ff.FindFile(strDir);

while(res)

{

res=ff.FindNextFile();

if(ff.IsDirectory){/*如果是文件夹就XXXXX*/};

else

{ //ff.GetFileName就是每个文件名,比如如下设计

CString s;

s.Format("%s",ff.GetFileName());

///干你想干的事情吧

///不过注意有时候会把你看不到得系统文件也读出来

}

}

2:

VC代码,功能很完整。可以只选择文件夹中的一幅图像,然后点OK,会自动遍历

整个文件夹。读取各个文件的完整路径到一个vector中,并不把所有图像读进内存,这样可以

节省不必要的内存开销。 在处理函数中,根据这些完整的路径,打开一个处理一个释放一个。

直到处理完所有图像。

C/C++ code

int
CBatch::FileOpenEx()

{

int
counter
=
0
;

CString ss
=
""
;

pair
<
map
<
CString,CString
>
::iterator,
bool
>
Pair_Insert;

//
TODO: Add your command handler code here

int
nimg
=
0
;

CString ftitle,fname,fpath,fpathname,froot;

CString mp[
7
];

static

char
szFilter[]
=

"
*.BMP|*.BMP|All Files(*.*)|*.*||
"
;

CFileDialog FileDlg( TRUE, NULL, NULL,OFN_HIDEREADONLY, szFilter );

if
( FileDlg.DoModal()
==
IDOK )

{

fpathname
=
FileDlg.GetPathName();

CFileFind finder;

finder.FindFile(fpathname);

finder.FindNextFile();

froot
=
finder.GetRoot();

BOOL bResult;

fpathname
=
froot
+
_T(
"
//*.*
"
);
//
找到该文件的文件夹,

bResult
=
finder.FindFile(fpathname);
//
然后从头开始一个一个遍历

while
(bResult)

{

counter
++
;

bResult
=
finder.FindNextFile();

if
(finder.IsDots())
continue
;

if
(finder.IsDirectory())
continue
;

fname
=
finder.GetFileName();

if
(
"
bmp
"

!=
fname.Right(
3
)
&&

"
BMP
"

!=
fname.Right(
3
) )
continue
;

//
找到了一个bmp文件,开始提取相关信息

FPRO fpro;
//
自定义的一个结构体

fpro.filePath
=
finder.GetFilePath();
//
路径和文件名,包括扩展名。

fpro.fileName
=
finder.GetFileName();

fpro.fileTitle
=
finder.GetFileTitle();

m_imvec.push_back(fpro);

}
//
while

}
//
if

BatchProcess();

return

1
;

}

int
CBatch::BatchProcess()

{

CMainFrame
*
pMain
=
(CMainFrame
*
) AfxGetApp()
->
m_pMainWnd;

CBlurEstimation3View
*
pView
=
(CBlurEstimation3View
*
) pMain
->
GetActiveView();

IMIter it_start,it_end,it;

for
(it
=
m_imvec.begin(); it
!=
m_imvec.end();
++
it)

{

CString Dir
=
it
->
filePath;

if
(dib.Load(Dir))

{

CClientDC dc(pView);

dib.SetPalette(
&
dc);

dib.Draw(
&
dc);

}

else

continue
;

int
width
=
dib.m_Width;

int
height
=
dib.m_Height;

int
srcLineBytes
=
dib.m_DataSize
/
height;

int
residual
=

4

-
width
%
4
;

if
(residual
==
4
)

residual
=
0
;

if
(dib.m_DataSize
==
width
*
height)

residual
=

0
;

width
=
width
-
width
%
4
;

#pragma
region

//
分配内存,读取1D图像数据

BYTE
*
pBits
=

new
BYTE[width
*
height];

//
分配内存,读取2D 图像数据

//
BYTE **p2DBits = new BYTE *[height];

//
for(int i=0; i<height; ++i)

//
p2DBits[i] = new BYTE[width];

BYTE pixel;

for
(
int
i
=
0
; i
<
height;
++
i)

for
(
int
j
=
0
; j
<
width;
++
j)

{

pixel
=
dib.m_pDibBits[srcLineBytes
*
i
+
j];

//
p2DBits[i][j] = pixel;

pBits[i
*
width
+
j]
=
pixel;

}

#pragma
endregion

float
param
=

0
;

//
***************************************************************

//
此处添加代码

//
处理

//
end此处添加代码

//
****************************************************************

CString str;

str.Format(
"
%f
"
,param);

it
->
param
=
str;

//
for(i=0; i<height;++i)

//
delete []p2DBits[i];

//
delete []p2DBits;

delete []pBits;

}

return

1
;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: