AVI创建AVI文件的示例代码解析_第1页
AVI创建AVI文件的示例代码解析_第2页
AVI创建AVI文件的示例代码解析_第3页
AVI创建AVI文件的示例代码解析_第4页
AVI创建AVI文件的示例代码解析_第5页
免费预览已结束,剩余12页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AVI创建AVI文件的示例代码(C) 2002卢西恩Wischik。此代码是免费的,任何人都可以用它做为所欲为,包括纳入商业产品。此代码创建的AVI文件,包括视频和音频。视频可以压缩使用您的计算机上安装过滤器可以把它弹出一个系统对话框,要求用户过滤使用,或者你能记住这些信息,以避免在未来的对话框,你可以假设无压缩和完全避免的对话框。为压缩音频,我相信这是不可能使用的AVI功能。相反,你必须创建一个非压缩音频的AVI文件,然后压缩它使用像 Win dows MovieMaker中的一些外部工具。包括七个功能,编写的代码(阶级)的C + +和使用用于 Windows的视频(已建立到所有版本的 Wi

2、ndows )。我用这段代码添加到自己的项目单位( avi_utils.cpp , avi_utils.h )。此网页包含如何使用函数来创建的AVI文件,头文件和源代码的例子。你应该复制代码,粘贴到自己的项目。是普通的Win32代码,并编译下用Borland C + + builder5 中和VisualStudio。NET干净,和其他的编译器应该没有问题。Borland的编译器通常允许的FPU异常。这可能会导致一个问题,因为一些过滤器(如DivX )提出的FPU异常。因此,Borland用户应使用此代码在某个时刻之前创建的AVI -我在WinMain的开始。(这是没有必要的Visual C

3、+ +,因为默认情况下禁用的例外)。#包括 vfloat.h> 的_control87 ( MCW_EMMCW_EM; / /改编的FPU因此它不会引发异常如何创建AVI文件的例子要创建一个 AVI从一堆文件。下面的代码创建一个 5位图AVI (1.bmp , 2.bmp,5.bmp )和 WAV 文件(wav.wav )。常量字符 * FNS = “1.bmp”," 2.bmp”," 3.bmp”," 4.bmp”," 5.bmp” ;夏晖 AVI = CreateAvi(“test.avi ” 1000 年,NULL) ;/ / 1000 毫秒

4、帧之间的时期(I = 0; vsizeof (FNS 的 / SIZEOF ( FNS 0)的 HBITMAP HBM =(HBITMAP句柄)的 Loadimage(NULL, FNS I , IMAGE_BITMAP 0,0 ,LR_LOADFROMFILE | LR_CREATEDIBSECTIONAddAviFrame (AVI, HBM ;DeleteObject 的(HBM ;(AVI,a”wav.wavSND_FILENAME ; AddAviWavCloseAvi(AVI);要创建与DivX压缩的AVI 。此代码创建的相同与DivX视频压缩的AVI,没有音频。代码其实只是表明D

5、ivX和弹出一个对话框, 让用户控制的更多细节 (HWND是一些可以使用该对话框的父窗口)。您可能会保留一份副本OPTS结构,以提供相同的默认用户下一次。或您可以通过虚假的SetAviVideoCompression 功能抑制的用户界面对话框中,如果OPTS 结构已经填写正确。"4.bmp”," 5.bmp” ;FNS I ,IMAGE_BITMAP 0,0,常量字符 * FNS = “1.bmp”," 2.bmp”," 3.bmp”,夏晖 AVI = CreateAvi (“test.avi ”,1000, NULL ;(I = 0; <size

6、of (FNS 的 / SIZEOF ( FNS 0 ) ; I + +的 HBITMAP HBM =(HBITMAP句柄)的 Loadimage( NULLLR_LOADFROMFILE | LR_CREATEDIBSECTION(我=0)/ /设置压缩前的第一帧AVICO MP RESS OP TIONS OP TS;AddAviFrame (AVI, HBM ;DeleteObject 的(HBM ;CloseAvi ( AVI);要创建一个动态绘制的图像的AVI文件。此代码显示了如何利用自己的动画,而不是仅仅依靠现有的位图文件为AVI文件。注意:你必须使用DIBSections,而不是

7、正常依赖于设备的位图。(0)hdcscreen 的 HDC= GetDC 的,HDC= CreateCompatibleDC ( hdcscreen); ReleaseDC(0, hdcscreen );为 BITMAPINFC双向;ZeroMemory (& BI , sizeof ( BI)的);的 BITMAPINFOHEADE和波黑=bi.bmiHeader;bih.biSize = sizeof(波黑)的;bih.biWidth = 200;bih.biHeight = 200;bih.b iP la nes = 1;bih.biBitCou nt = 24;bih.biCo

8、 mp ressio n = BI_RGB;)的& OxFFFFFFFC *bih.biSizeImage =( bih.biWidth * bih.biBitCount / 8 +3 bih.biHeight;bih.biX Pels PerMeter = 10000;bih.biY Pels PerMeter = 10000;bih.biClrUsed = 0;bih.biClrIm porta nt = 0;的 HBITMAP无效 * 位;HBM = CreateDIBSection( HDC ( BITMAPINFO *)和波黑,DIB_RGB_COLORS& 位,空,

9、空)HGDIOBJ holdb = SelectObject 的(HDC HBM ;HPEN马力的 Create Pen ( P S_SOLID 16, RGB( 255255128);HGDIOBJ holdp = SelectObject 的(HDC 马力);夏晖 AVI = CreateAvi (“ test.avi ”,100,空);(帧=0;帧<50;帧 +)/ /静态背景DWORD种子=的 GetTickCount ();的 DWORD * dbits =( DWORD)位;(unsigned int 类型 I = 0;我 <bih.biSizelmage / size

10、of ( DWOR值)的,我 +) dbitsI= 种子;种子+ = 79;MoveToEx (HDC 0,0 , NULL;的 LineTo ( HDC 帧 * 3100 );AddAviFrame (AVI,HBM ;CloseAvi (AVI);SelectObject 的(HDC holdb)DeleteDC (HDC ; DeleteObject的 SelectObject 的(HDC holdp )的;的(HBM ; DeleteObject 的(HP ;头文件“avi utils.h# IFNDEF _avi_utils_H# 定义 _avi_utils_H 服务/ /的AVI事

11、业-创建AVI文件/ /(C) 2002卢西恩Wischik。对使用没有任何限制。DECLARE_HANDL夏晖);/ /标识夏晖正在创建一个AVI文件夏晖 CreateAvi (常量字符 * FN , INT frame period 个 WAVEFORMATEX * WFX/ / CreateAvi -调用此开始创建的AVI文件/ /这一时期是MS之间的每个位图帧的数量。/ /的waveformat的可以为null ,如果你不会添力口任何音频,/ /或如果你要添加音频文件。,HRESULT AddAviFrame (夏晖 AVI, HBM的 HBITMAP ;,HRESULT AddAvi

12、Audio (夏晖 AVI,无效 * DAT ,无符号长 numbytes );/ / AddAviFrame - 这个位图添加到 AVI文件。HBM点必须是一个 DIBSection 。/ /这是调用者的责任,以释放HBM/ / AddAviAudio 的-添加此音频的垃圾。被指定在音频格式 。这将失败,如果为NULL/ /两个返回S_OK如果没事,否则的AVI错误之一。HRESULT勺 AddAviWav (夏晖 AVI,常量字符 * WAV, DWOR标志);/ / AddAviWav - 一个方便的方式来增加整个波形文件到 AVI/ / wav 文件可能会在内存中(在这种情况下,标志

13、=SNDMEMO) Y 或磁盘上的文件(在这种情况下,标志 =SND_FILENAME 此功能需要,无论是空WAVEFORMA传递到CreateAvi的, 或波形文件现在被添加具有相同的格式为前面添加。HRESULT勺 SetAviVideoCompression (AVI 夏晖,HBM的 HBITMAP AVICOMPRESSOPTIONS * OPTS 布尔的 ShowDialog , hP are nt 为 HWN啲);/ / SetAviVideoCo mp ressio n的-允许视频压缩。如果需要压缩,那么这个函数必须被调用之前已被添加任何位图帧位图HBM、须是一个DIBSecti

14、on (AVI知道什么格式/大小,你给它), 但实际上不会被加入到电影。这个函数可以显示一个对话框让用户选择压缩。在这种情况下, 设置ShowDialog的真实和指定的父窗口。如果OPTS非NULL和其 的dwFlags财产包括AVICOMPRESSF_VA的D然后OPTS各被用来给初始 值。OPTS是如果非NULL则选择的选项将被放置在。这个函数也可以用一个对话框,选择不压缩。在这个的情况下,ShowDialog的设置为false , hParent为忽略,并指定压缩 在/ /“OPTS的,而且也没有需要调用 GotAviVideoCompression,事后。HRESULT CloseAv

15、i(夏晖AVI);/ / CloseAvi - AVI,必须关闭此消息。无符号短wChannels;/ / = 1 或2为单声道或立体声un sig ned int类型FormatAviMessage ( HRESULT 代码的 char * buf 中,unsigned int 类 型 LEN ;给定/ / FormatAviMessage - 一个错误代码,格式字符串/ /它返回的错误消息的长度。如果BUF / len个百分点,那么它也写入尽可能到那里。# ENDIF源代码 “avi_utils.cpp#定义严格 #定义 WIN32_LEAN_AND_MEAN#包括楼得分 # 包括 <

16、;vfw.h>包括"avi_utils.h ”/ /首先,我们将定义为 WAV文牛格式。# 包括 vpshpack1.h>/ / = “fmttypedef 结构字符ID 4无符号长的大小;=16的短 wFormatTag;/ / / / = WAVE FORMAT PCM = 1/ / = wChannels 可* (? wBitsPerSample = 8 1:2 )/ / = 8 或16个,每个样品位无符号长的大小无符号字符数据1;/ / = datsize,以下数组的大小/ / =原始数据放在这里 DataCh unk;typedef 结构字符 ID 4;无符号长

17、尺寸;/ / =“ RIFF”/ / = datsize +8 +16 +4的char类型4;/ / =“波”无符号长 dwSamplesPerSec; / / = 11025 或 22050 或 44100 的无符号长 dwAvgBytesPerSec; / / = wBlockAlign * dwSamplesPerSec 无符号短wBlockAlign;无符号短 wBits PerSam pie; FmtChu nk;typedef 结构/ / =“数据”字符 ID 4;布尔ISERR;/ /如果属实,那么没有功能将做任何事情时,首先FmtChu nk FMT;DataChu nk DA

18、T; WavChu nk;#包括 vpoppack.h>/ /这是由夏晖句柄代表的内部结构:typedef 结构lAVIFile * PF ILEWAVEFORMATEX WF由 CreateAvi 创造;/ / 给出为 CreateAvi (nChanels = 0,如果没有了。)。/ /指定在CreateAvi,视频流第一INT期间。第一次被创建时使用的音频流; 次被创建时使用IAVIStream * 为/ /音频流,IAVIStream * PS * psCo mp ressed;无符号长 nframe, nsamp; / /音频流时,第一次被创建/ /初始化视频流,创建该帧将被添

19、加下,明年这些样本将被添加 TAviUtil;夏晖 CreateAvi (常量字符 * FN , INT frame period 个 WAVEFORMATEX * W)X lAVIFile * P FILE;AVIFileInit ();HRESULT HR = AVIFileOpen ( pfile 中,FN, OF_WRITE | OF_CREATE NULL ;如果(hr! = AVIERR_OK ) AVIFileExit()返回 NULL;TAviUtil * AU = 新 TAviUtil;太子港的pfile = pfile(WFX= NULL ZeroMemory( AU-&g

20、t; WFXsizeof (WAVEFORMATE的);其他 Copy Memory(AU-> WFX WFX sizeof ( WAVEFORMATEX 的;AU-> 周期=frame period;AU-> = 0; AU-> PS = 0; 太子港 > psCompressed = 0;AU-> nframe = 0;太子港 > nsamp = 0;AU-> ISERR = FALSE;回报(夏晖)金;HRESULT CloseAvi (夏晖 AVI)如果(AVI = NULL )返回 AVIERR_BADHANDLE;TAviUtil *

21、 AU =(TAviUtil *) AVI;(AU-> = 0)AVIStreamRelease ( AU->);太子港 > =0;(AU-> psCompressed = 0 ) AVIStreamRelease (太子港-> psCompressed 的);太子港 > p sCo mp ressed = 0;(AU-> PS = 0)AVIStreamRelease ( AU-> PS) ; AU-> PS = 0;如果 AVIFileRelease ( AU-PFILE = 0 )( AU-PFILE);太子港 >的 pfile

22、 = 0;AVIFileExit ();删除金;返回S_OK;HRESULT勺 SetAviVideoCompression ( HWNI的 hParent 为布尔的 ShowDialog ,HBM的 HBITMAP夏晖 AVI, AVICOMPRESSOPTIONS * OP)S如果(AVI = NULL )返回 AVIERR_BADHANDLE;如果(HBM = NULL 返回 AVIERR_BADPARAM;DIBSecti on 的 DIB 的 SBM = GetObject 的 INT ( HBM SIZEOF ( DIBS), DIBS);如果(sbm! = sizeof ( DI

23、BSection 的)的)回报 AVIERR_BADPARAM;TAviUtil * AU =(TAviUtil *) AVI;如果(AU-> ISERR)返回 AVIERR_ERROR;(AU psCompressed = 0 )返回 AVIERR_COMPRESSOR;如果(AU-> PS = 0 ) / /仓U建流,如果是以前没有的AVISTREAMINFO strhdr; ZeroMemory(& sizeof (strhdr)的 strhdr ,);strhdr.fccT ype = streamt yp eVIDEO;/ /流的类型strhdr.fccHa nd

24、ler = 0;strhdr.dwScale = AU->strhdr.dwRate = 1000;strhdr.dwSuggestedBufferSize = dibs.dsBmih.biSizelmage;SetRect 对(strhdr.rcFrame , 0, 0, dibs.dsBmih.biWidth,dibs.dsBmih.biHeight );HRESULT HR = AVIFileCreateStream(太子港> PFILE ,与 AU-> PS& strhdr );女口果(hr! = AVIERR_OK ) AU-> ISERR = TRU

25、E;回报小时;如果(金-> psCompressed的=0 ) / /设置压缩,提示对话框,如果必要AVICO MP RESS OP TIONS myo pts; ZeroMemory (& sizeof ( myo pts )的 myopts,);AVICO MP RESS OP TIONS * aopts 1;(opts! = NULL ) aopts 0= 的 OPTS其他 aopts 0 = &myopts;如果(的 ShowDialog )BOOL 型水库(布尔)AVISave Op tio ns (hP are nt 为,0,1,和 AU-> PS, a

26、o pts );如果(RES AVISaveOptionsFree(, aopts );太子港 ISERR = TRUE;回报AVIERR_USERABORT;HRESULT HR= AVIMakeCompressedStream (&太子港 > psCompressed 的 AU-> PS, aopts 0,空);AVISaveOptionsFree(1, aopts );(HR = AVIERR_OK ) 太子港 ISERR = TRUE;回报小时;DIBSectio n 的 DIB 的;GETOBJECT ( HBM SIZEOF ( DIBS), DIBS);HR

27、= AVIStreamSetFormat (AU-> psCompressed, 0, &dibs.dsBmih ,dibs.dsBmih.biSize+ dibs.dsBmih.biCIrUsed * sizeof(RGBQUAD的);女口果(hr! = AVIERR_OK ) AU-> ISERR = TRUE;回报小时;返回 AVIERR_OK;,HRESULT AddAviFrame (夏晖 AVI, HBM的 HBITMAP 如果(AVI = NULL )返回 AVIERR_BADHANDLE;如果(HBM = NULL 返回 AVIERR_BADPARAM;DI

28、BSection 的 DIB 的 SBM = GetObject 的 INT ( HBM SIZEOF ( DIBS), DIBS);TAviUtil * AU =(TAviUtil *) AVI;如果(sbm! = sizeof ( DIBSection 的)的)回报 AVIERR_BADPARAM;如果(AU-> ISERR)返回 AVIERR_ERROR;如果(AU-> PS = 0 ) / /创建流,如果是以前没有的AVISTREAMINFO strhdr; ZeroMemory(& sizeof ( strhdr)的 strhdr ,);strhdr.fccT y

29、pe = streamty peVIDEO;/ /流的类型strhdr.fccHa ndler = 0;strhdr.dwScale = AU->strhdr.dwRate = 1000;strhdr.dwSuggestedBufferSize = dibs.dsBmih.biSizelmage;SetRect 对(strhdr.rcFrame , 0, 0, dibs.dsBmih.biWidth,dibs.dsBmih.biHeight );HRESULT HR = AVIFileCreateStream(太子港> PFILE ,与 AU-> PS& strhdr

30、 );女口果(hr! = AVIERR_OK ) AU-> ISERR = TRUE;回报小时;/ /创建一个空的压缩,如果用户没有设置任何(金-> PsCompressed 的=0 )AVICOMPRESSOPTIONS OPTS; ZeroMemory( OPTS sizeof (OPTS 的);opts.fccHandler = mmioFOURCC(“ D',“ I ”,“ B”,HRESULT HR= AVIMakeCompressedStream (AU-> psCompressed, AU-> PS: OPTSNULL ;(HR = AVIERR_

31、OK ) 太子港 ISERR = TRUE;回报小时;+ dibs.dsBmih.biCIrUsed * sizeof(RGBQUAD的);女口果(hr! = AVIERR_OK ) AU-> ISERR = TRUE;回报小时;/ /现在我们可以添加框架dibs.dsBmih.biSizeImage,AVIIF_KEYFRAME 空,空);如果(hr! = AVIERR_OK)AU-> ISERR = TRUE;回报小时;太子港 nframe + + 返回S_OK;HRESULT HR= AVIStreamWrite (AU-> psCompressed,太子港 nfram

32、e , 1, dibs.dsBm.bmBits ,HRESULT AddAviAudio (夏晖 AVI,无效 * DAT ,无符号长 numbytes) 如果(AVI = NULL )返回 AVIERR_BADHANDLE;(DAT = NULL II numbytes = 0)返回 AVIERR_BADPARAM;TAviUtil * AU =(TAviUtil *) AVI;如果(AU-> ISERR)返回 AVIERR_ERROR;如果(太子港 > wfx.nChannels 的=0 )返回 AVIERR_BADFORMAT;无符号长 numsamps = numbytes

33、 * 8 / AU-> wfx.wBitsPerSample;如果(nu msa mps* AU-> wfx.wBits PerSam pie / 8)= nu mbytes !)返回 AVIERR_BAD PARAM;如果(=0 AU-> ) / /创建流,如果有必要AVISTREAMINFO ahdr; ZeroMemory (& sizeof ( ahdr )的 ahdr,);ahdr.fccT ype = streamt yp eAUDIO;ahdr.dwScale = AU-> wfx. nBlockAlig n;ahdr.dwRate = AU-&g

34、t; wfx. nSa mp les PerSec * AU-> wfx. nBlockAlig n;ahdr.dwSa mpl eSize = AU-> wfx.n BlockAlig n;ahdr.dwQuality =(DWORD-1;HRESULT HR = AVIFileCreateStream(AU-> pfile 中,AU->,与 ahdr 的);如果(hr! = AVIERR_OKAU-> ISERR = TRUE;回报小时;HR = AVIStreamSetFormat(AU-> 0,与非盟-> WFX , sizeof (WAVEF

35、ORMATE的);如果(hr! = AVIERR_OKAU-> ISERR = TRUE;回报小时;/ /现在我们可以将数据写入HRESULT HR= AVIStreamWrite ( AU->太子港 > nsamp numsamps DAT numbytes,0,NULL,则空);如果(hr! = AVIERR_OK ) AU-> ISERR = TRUE;回报小时;太子港 nsamp + = numsamps 的;返回 S_OK;,HRESULT AddAviWav(夏晖 AVI,常量字符 * SRC, DWOR标志) 如果(AVI = NULL )返回 AVIER

36、R_BADHANDLE;(flags! = SND_MEMORY &&标志=SND_FILENAME )返回 AVIERR_BADFLAGS;如果(SRC = 0)返回 AVIERR_BADPARAM;TAviUtil * AU =(TAviUtil *) AVI;如果(AU-> ISERR)返回 AVIERR_ERROR;字符 * BUF = 0; WavChunk * WAV =( WavChunk *) SRC;女口果(旗=SND_FILENAMEHANDLE HF =的 CreateFile ( SRC GENERIC_READFILE_SHARE_READ为 N

37、ULL,OPEN_EXISTING 0,NULL);女口果(HF = INVALID_HANDLE_VALUE AU-> ISERR = TRUE;回报 AVIERR_FILEOPEN;DWORD 大小=GetFileSize(HF,NULL ;BUF =新的char 大小;ReadFile 的 DWOR红色;(HF,缓冲区,大小,红,空)CloseHandle( HF);WAV ( WavChunk *) BUF;/ /检查格式不冲突BOOL badformat = FALSE;(太子港 > wfx.nChannels的=0 ) 太子港 > wfx.wFormatTag =

38、 WAV-> fmt.wFormatTag;AU-> wfx.cbSize = 0;太子港 > wfx.nAvgBytesPerSec = WAV-> fmt.dwAvgBytesPerSec;太子港 > wfx.nBlockAlign = WAV-> fmt.wBlockAlign;AU-> wfx. nCha nn els = WAV-> fmt.wCha nn els;太子港 > wfx. nSamp les PerSec = WAV-> fmt.dwSam pies PerSec;太子港 > wfx.wBitsPerSa

39、mple = WAV-> fmt.wBitsPerSample;其他( AU wfx.wFormatTag = WAV-> fmt.wFormatTag ! ) badformat = TRUE;! ) badformat = TRUE;(AU wfx.nAvgBytesPerSec = WAV-> fmt.dwAvgBytesPerSec! ) badformat = TRUE;(AU wfx. nBlockAlig n = WAV-> fmt.wBlockAlig n(AU-> wfx.nChannels WAV-> fmt.wChannels! ) b

40、adformat = TRUE;(AU wfx. nSamp les PerSec = WAV-> fmt.dwSa mp les PerSec! ) badformat = TRUE;(AU wfx.wBitsPerSample = WAV-> fmt.wBitsPerSample! ) badformat = TRUE;如果(badformat ) (buf! = 0)删除buf 中返回 AVIERR_BADFORMAT;如果(=0 AU-> ) / /创建流,如果有必要AVISTREAMINFO ahdr; ZeroMemory (& sizeof (ahdr

41、)的 ahdr,);ahdr.fccT ype = streamt yp eAUDIO;ahdr.dwScale = AU-> wfx. nBlockAlig n;ahdr.dwRate = AU-> wfx. nSa mp les PerSec * AU-> wfx. nBlockAlig n;ahdr.dwSa mpl eSize = AU-> wfx. nBlockAlig n;ahdr.dwQuality =(DWORD-1;HRESULT HR = AVIFileCreateStream(AU-> pfile 中,AU->,与 ahdr 的);如果

42、(hr! = AVIERR_OK)HR = AVIStreamSetFormat如果(hr! = AVIERR_OK)/ /现在我们可以将数据写入( buf! = 0 )删除buf 中 AU-> ISERR = TRUE回报小时;(AU-> 0,与非盟-> WFX,sizeof (WAVEFORMATE的);( buf! = 0 )删除buf 中 AU-> ISERR = TRUE回报小时;无符号长 numbytes = WAV-> dat.size;无符号长 numsamps = numbytes * 8 / AU-> wfx.wBitsPerSample

43、;HRESULT HR= AVIStreamWrite ( AU-> AU-> nsamp, numsamps WAVRat.data , numbytes,0,NULL 则空);如果(buf! = 0)删除buf 中 ;如果(hr! = AVIERR_OK ) AU-> ISERR = TRUE;回报小时;太子港 nsamp + = numsamps 的;返回 S_OK;unsigned int类型 FormatAviMessage ( HRESULT勺代码中的 char * buf 中,unsigned int类型LEN)常量字符*味精=“未知的AVI结果代码”;开关(代码)S_OK,味精=“成功”;休息;案件AVIERR_BADFORMA味精=“ AVIERR_BADF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论