VC++6.0实现的解码JP2000

		opj_dparameters_t parameters;	/* decompression parameters */
	opj_event_mgr_t event_mgr;		/* event manager */
	opj_image_t *image = NULL;
	FILE *fsrc = NULL;         // 源文件句柄
	unsigned char *src = NULL; // 存放源文件数据内存
	int file_length;           // 文件长度
	opj_dinfo_t* dinfo = NULL;	/* handle to a decompressor */
	opj_cio_t *cio = NULL;
//	opj_codestream_info_t cstr_info;  /* Codestream information structure */
//	char indexfilename[OPJ_PATH_LEN];	/* index file name */
//	char outfile[OPJ_PATH_LEN];

	// configure the event callbacks (not required) /
	memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
//	event_mgr.error_handler = error_callback;
//	event_mgr.warning_handler = warning_callback;
//	event_mgr.info_handler = info_callback;

	// set decoding parameters to default values
	opj_set_default_decoder_parameters(?meters);

	image = NULL;

	CString fileName;
/////////////////////////////////////////////////////////////
	CFileDialog dlgFile(TRUE);
    CString title;
    CString strFilter, strDefault, strFilename;

    VERIFY(title.LoadString(AFX_IDS_OPENFILE));

    // 初始文件扩展名dat
    strFilter += "JP2 Files (*.jp2)";
    strFilter += (TCHAR)‘\0‘;
    strFilter += _T("*.jp2");
    strFilter += (TCHAR)‘\0‘;
    dlgFile.m_ofn.nMaxCustFilter++;

    CString allFilter;
    VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));

    dlgFile.m_ofn.lpstrFilter = strFilter;
    dlgFile.m_ofn.lpstrTitle = title;
    dlgFile.m_ofn.lpstrFile = strFilename.GetBuffer(_MAX_PATH);
	dlgFile.m_ofn.lpstrInitialDir = "D:\\";

	// 显示文件选择对话框
    INT_PTR nResult = dlgFile.DoModal();

    // 如果文件打开则准备播放

    if (nResult == IDOK)
    {
		strFilename=dlgFile.GetPathName();
	   fileName = strFilename;
    }
    strFilename.ReleaseBuffer();
///////////////////////////////////////////////////////////////
	if(fileName != "")
	{
		fsrc = fopen(fileName, "rb");
		if (!fsrc)
			return ;
	}
	else
	{
		return;
	}
	// read the input file and put it in memory
	fseek(fsrc, 0, SEEK_END);
	file_length = ftell(fsrc);
	fseek(fsrc, 0, SEEK_SET);
	src = (unsigned char *) malloc(file_length);
	fread(src, 1, file_length, fsrc);
	fclose(fsrc);

	// decode the code-stream 

			// JPEG 2000 compressed image data
			// get a decoder handle
			dinfo = opj_create_decompress(CODEC_JP2);
			// catch events using our callbacks and give a local context
			opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);

			// setup the decoder decoding parameters using the current image and user parameters
			opj_setup_decoder(dinfo, ?meters);

			// open a byte stream
			cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);

			// decode the stream and fill the image structure
			image = opj_decode(dinfo, cio);
			if(!image)
			{
				//failed to decode image
				opj_destroy_decompress(dinfo);
				opj_cio_close(cio);
				return;
			}
			// close the byte stream
			opj_cio_close(cio);

	// free the memory containing the code-stream
	free(src);
	src = NULL;

	imagetoFile(image, "D:\\RGB.dat");//YUV422格式

	// free remaining structures
	if(dinfo)
		opj_destroy_decompress(dinfo);
// free codestream information structure
// if (*indexfilename)
//		opj_destroy_cstr_info(&cstr_info);
	// free image data structure
	opj_image_destroy(image);
	

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-03 13:09:49

VC++6.0实现的解码JP2000的相关文章

[转]Microsoft Platform SDK 选择及在vc++6.0中的配置

Windows Platform SDK Download Sites: Windows Server 2003 PSDK February 2003 Edition,可以和VC6一起使用.并支持各种目标OS的最后一个版本的SDK. This edition of the SDK supports development for the following platforms: Windows Server 2003 Windows Advanced Server, Limited Editio

VC++6.0调试:Watch窗口的使用

1 #include <stdio.h> 2 #include <windows.h> 3 4 class AutoExpand 5 { 6 public: 7 AutoExpand(int val, char* pval) 8 { 9 a = val; 10 p = pval; 11 } 12 private: 13 int a; 14 char *p; 15 }; 16 class CantExpand 17 { 18 public: 19 CantExpand(int val

vc++6.0快捷键

Ctrl+m+Crtr+o折叠所有大纲 Ctrl+M+Crtr+P: 停止大纲显示 Ctrl+K+Crtr+C: 注释选定内容 Ctrl+K+Crtr+U: 取消选定注释内容 Ctrl+J : 列出成员 智能感知Shift+Alt+Enter: 切换全屏编辑 Ctrl+B,T / Ctrl+K,K: 切换书签开关 Ctrl+B,N / Ctrl+K,N: 移动到下一书签 Ctrl+B,P: 移动到上一书签 Ctrl+B,C: 清除全部标签 Ctrl+I: 渐进式搜索 Ctrl+Shift+I: 

【VC++6.0】成功制作并使用lib库,转载

微软有许多头文件,这些头文件里面定义了许多函数,但是在头文件中你却找不到函数内容的身影,因为函数主体被保存在了lib库中.保存在库中有一个好处,那就是源代码不容易被发现,也就是说其中的一些技术别人不容易学到.废话少说,我们现在就开始制作lib库. 首先,第一步,打开VC++6.0,按Ctrl+N,选择工程选项卡,选中“Win32 Static Library”选项,输入工程名称,我们这里用“Lib库”,大家可以自己选择,至于路径,随便选一个吧,反正这次只是lib的实验. 然后点击“确定”,我们两

VC++6.0 sqlite3 配置、测试

/************************************************************************************* * VC++6.0 sqlite3 配置.测试 * 声明: * 本文仅仅是为了测试VC++6.0中是否可以使用sqlite3数据库,主要用于完成后续的 * 一些需求. * * 2015-10-21 晴 深圳 南山平山村 曾剑锋 *************************************************

在VC++6.0中给对话框设置背景色或者背景图片

/*********************************************************** *说明: 在VC++6.0中给对话框设置背景色或者背景图片 *备注:测试代码的对话框程序的工程名为:BJ *原理:在OnPaint()中加入代码 ***********************************************************/ // 注意:去掉相应以 /* */ 注释的注释符号后代码生效 void CBJDlg::OnPaint() {

VC++6.0 配置CppUTest测试环境

最近看<软件项目成功之道>,书中无数次提及到“单元测试”对于项目成败的重要性,看到同事将CppUTest用于Linux动态库测试,于是在VC++6.0环境下搭建一个基于CppUTest的单元测试环境,用于测试工作中编写的C函数.下面就来介绍整个搭建过程,整个过程分为四步:前期准备——需要的库:环境配置——VC++6.0配置:实例演示——可复现的Demo:拓展——后续学习资料. 一.前期准备: CppUTest下载 官网:http://cpputest.github.io/ 历史版本:https

解决win8与VC++6.0不兼容问题

找到VC++6.0安装文件夹Bin下的MSDEV.EXE程序 将MSDEV名字改为MSDEV1(或MSDEV2,3...) 右击改好的MSDEV1,打开属性面板,选择兼容性,勾上“在兼容模式下运行”,选择“windo XP (Service Pack 3 ),点击确定 双击MSDEV1就可以打开VC++6.0了 根本解决方案:如果用win8以上的版本,建议使用vs2012及其以上的版本.

解决win8不兼容VC++6.0

1.找到VC++6.0安装文件夹Bin下的MSDEV.EXE程序建议直接右键图标,选择‘打开文件位置’ 2.将MSDEV名字改为MSDEV1 3.右击改好的MSDEV1,打开属性面板,选择兼容性,勾上“以兼容模式运行运行这个程序”,选择“window  XP  (Service   Pack  2 ),点击确定 4.双击MSDEV1就可以打开VC++6.0了,正常运行