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