aboutsummaryrefslogtreecommitdiff
path: root/ports/itk/openjpeg.patch
diff options
context:
space:
mode:
authorAlexander Neumann <30894796+Neumann-A@users.noreply.github.com>2020-08-03 00:49:20 +0200
committerGitHub <noreply@github.com>2020-08-02 15:49:20 -0700
commit8e76503a769e153dad8f4e7b2c95a152bb35edaa (patch)
tree977e80e16b3ae4ef1d34824d505a5db8b877e904 /ports/itk/openjpeg.patch
parent1c2af994151fb3e177df54f89223b056ecddbcec (diff)
downloadvcpkg-8e76503a769e153dad8f4e7b2c95a152bb35edaa.tar.gz
vcpkg-8e76503a769e153dad8f4e7b2c95a152bb35edaa.zip
[ITK] Update to 5.1 (#11208)
* [vtk-m] new port vtk-m * [VTK] Update to 9.0 * include local buildtree changes * [pcl] disable VTK due to API changes in VTK 9.0 * [vtk-m] add supports field to be only x64 * [vtk-dicom] add python executable. * fix vtkm dependency * [vtk-dicom] fix missing std:: namespace * [vtk-m] add uwp to unsupported triplets * [vtk] add pegtl include patch, reenable IOMotionFX * remove hdf5 changes for testing * use different pgetl patch which redirects to the installed config of pegtl * [pegtl-2] version file needs renaming too * [vtk] change dependency to pgetl-2 and fix the patch * [vtk] put in hdf5 fix again and correct manually installed include files * remove deprecated function to retrigger CI * [lz4] correctly lowercase the lz4 config * [vtk] remove unnecessary code * [pegtl-2] add homepage * [pegtl] modernize portfiles * [vtk-dicom] add homepage * [vtk-dicom] modernize portfile * [vtk-m] remove empty build depends * [vtk] try fixing the permission issue * [vtk] minimal dependency correction * [itk] update * fix portfile errors * WIP commit * should make ITK green in VCPKG CI but there a still issues with features * more dependencies and features.... * remove itk from baseline failure so the check can get green * more dependency updating. * minor build fixes * [openjpeg] Fix dll location * fix other issues * add rtkcuda * [openjpeg] remove default features to make arm and uwp platforms happy * [itk] more dependency fixes * [openjpeg] fix no tools case * [itk] fix wip patch * [itk] split up patches & cleanup & and move rtk tools if build * [itk] fix patch and remove old and wip patch * [nifticlib] Add new port required by minc * [nifticlib] change repo and add features * [nifticilib] add zlib dependency & cleanup * [minc] add new port * [vcpkg/scripts] add swig to find acquire programm * [itk/minc] update for external minc * add supports field for nifticlib * [itk] make python a default feature for testing * [itk] cleanup python vars a bit [vcpkg/scripts] correct swig hash * [vcpkg/scripts] fix swig * [itk] fix python include path on unix system * [itk] remove python as a default. A bit of feature cleanup * [itk] update remote RTK * [itk|rtk] remove RTK module before configure to allow patching * [opencl] update opencl wrapper * [itk] fix opencl static linkage * [itk] add cufftw fix * update baseline * [itk] fix itk[tbb] * [itk] update python paths to 3.8 * [itk] add failure messages for unsupported architectures for some features * [vcpkg_find_acquire_program] update swig to 4.0.2 * Update portfile.cmake * [itk] move the module removal out of the if for people reusing the old source tree * [itk] add missing auto_clean to vcpkg_copy_tools * Update ports/nifticlib/CONTROL Co-authored-by: Robert Schumacher <roschuma@microsoft.com> * Update ports/openjpeg/portfile.cmake Co-authored-by: Robert Schumacher <roschuma@microsoft.com> * Update scripts/cmake/vcpkg_find_acquire_program.cmake Co-authored-by: Robert Schumacher <roschuma@microsoft.com> * [openjpeg] pass OPTIONS to vcpkg_configure_cmake * [itk] fix typo and leave a todo. * use sourceforge args for swig * Update ports/openjpeg/CONTROL Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com> * Update ports/opencl/CONTROL Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com> * [itk] remove debug msgs from patch * pre-install yasm on OSX Co-authored-by: Lily <47812810+LilyWangL@users.noreply.github.com> Co-authored-by: Robert Schumacher <roschuma@microsoft.com> Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com> Co-authored-by: JackBoosY <yuzaiyang@beyondsoft.com>
Diffstat (limited to 'ports/itk/openjpeg.patch')
-rw-r--r--ports/itk/openjpeg.patch548
1 files changed, 548 insertions, 0 deletions
diff --git a/ports/itk/openjpeg.patch b/ports/itk/openjpeg.patch
new file mode 100644
index 000000000..0fe1f34c9
--- /dev/null
+++ b/ports/itk/openjpeg.patch
@@ -0,0 +1,548 @@
+diff --git a/Modules/IO/JPEG2000/src/itkJPEG2000ImageIO.cxx b/Modules/IO/JPEG2000/src/itkJPEG2000ImageIO.cxx
+index 1b1fe9526..0da4aa0c4 100644
+--- a/Modules/IO/JPEG2000/src/itkJPEG2000ImageIO.cxx
++++ b/Modules/IO/JPEG2000/src/itkJPEG2000ImageIO.cxx
+@@ -26,9 +26,9 @@
+
+ extern "C"
+ {
+-#include "openjpeg.h"
+-#include "j2k.h"
+-#include "jp2.h"
++#include <openjpeg.h>
++//#include "j2k.h"
++//##include "jp2.h"
+ }
+
+
+@@ -62,8 +62,7 @@ public:
+ OPJ_UINT32 m_TileStartX;
+ OPJ_UINT32 m_TileStartY;
+
+- OPJ_UINT32 m_NumberOfTilesInX;
+- OPJ_UINT32 m_NumberOfTilesInY;
++ OPJ_UINT32 m_NumberOfTiles;
+
+ opj_dparameters_t m_DecompressionParameters; /* decompression parameters */
+ };
+@@ -86,8 +85,7 @@ JPEG2000ImageIO::JPEG2000ImageIO()
+ this->m_Internal->m_TileStartX = 0;
+ this->m_Internal->m_TileStartY = 0;
+
+- this->m_Internal->m_NumberOfTilesInX = 0;
+- this->m_Internal->m_NumberOfTilesInY = 0;
++ this->m_Internal->m_NumberOfTiles = 0;
+
+ const char * extensions[] = { ".j2k", ".jp2", ".jpt" };
+
+@@ -139,22 +137,16 @@ JPEG2000ImageIO::ReadImageInformation()
+ {
+ itkDebugMacro(<< "ReadImageInformation()");
+
+- FILE * l_file = fopen(this->m_FileName.c_str(), "rb");
+-
+- /* decompression parameters */
++ /* set decoding parameters to default values */
++ opj_set_default_decoder_parameters(&(this->m_Internal->m_DecompressionParameters));
+
+- if (!l_file)
++ opj_stream_t * cio = opj_stream_create_default_file_stream(this->m_FileName.c_str(), true);
++ if (!cio)
+ {
+ itkExceptionMacro("JPEG2000ImageIO failed to open file for reading: " << this->GetFileName() << std::endl
+ << "Reason: "
+ << itksys::SystemTools::GetLastSystemError());
+ }
+-
+- /* set decoding parameters to default values */
+- opj_set_default_decoder_parameters(&(this->m_Internal->m_DecompressionParameters));
+-
+- opj_stream_t * cio = opj_stream_create_default_file_stream(l_file, true);
+-
+ this->m_Internal->m_Dinfo = nullptr; /* handle to a decompressor */
+
+ opj_image_t * l_image = nullptr;
+@@ -187,14 +179,14 @@ JPEG2000ImageIO::ReadImageInformation()
+ /* JPEG-2000 codestream */
+
+ /* get a decoder handle */
+- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_J2K);
++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_J2K);
+ if (!this->m_Internal->m_Dinfo)
+ {
+ opj_stream_destroy(cio);
+- fclose(l_file);
++ // fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_decompress(CODEC_J2K) returns nullptr");
++ << "Reason: opj_create_decompress(OPJ_CODEC_J2K) returns nullptr");
+ }
+ break;
+ }
+@@ -202,14 +194,14 @@ JPEG2000ImageIO::ReadImageInformation()
+ {
+ /* JPEG 2000 compressed image data */
+ /* get a decoder handle */
+- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_JP2);
++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_JP2);
+ if (!this->m_Internal->m_Dinfo)
+ {
+ opj_stream_destroy(cio);
+- fclose(l_file);
++ // fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_decompress(CODEC_JP2) returns nullptr");
++ << "Reason: opj_create_decompress(OPJ_CODEC_JP2) returns nullptr");
+ }
+ break;
+ }
+@@ -217,20 +209,19 @@ JPEG2000ImageIO::ReadImageInformation()
+ {
+ /* JPEG 2000, JPIP */
+ /* get a decoder handle */
+- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_JPT);
++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_JPT);
+ if (!this->m_Internal->m_Dinfo)
+ {
+ opj_stream_destroy(cio);
+- fclose(l_file);
++ // fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_decompress(CODEC_JPT) returns nullptr");
++ << "Reason: opj_create_decompress(OPJ_CODEC_JPT) returns nullptr");
+ }
+ break;
+ }
+ default:
+ opj_stream_destroy(cio);
+- fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+ << this->GetFileName() << std::endl
+ << "Reason: "
+@@ -247,27 +238,11 @@ JPEG2000ImageIO::ReadImageInformation()
+ << "Reason: opj_setup_decoder returns false");
+ }
+
+- // Image parameters - first tile
+- OPJ_INT32 l_tile_x0;
+- OPJ_INT32 l_tile_y0;
+
+- // Image parameters - tile width, height and number of tiles
+- OPJ_UINT32 l_tile_width;
+- OPJ_UINT32 l_tile_height;
+- OPJ_UINT32 l_nb_tiles_x;
+- OPJ_UINT32 l_nb_tiles_y;
+
+ itkDebugMacro(<< "Trying to read header now...");
+
+- bResult = opj_read_header(this->m_Internal->m_Dinfo,
+- &l_image,
+- &l_tile_x0,
+- &l_tile_y0,
+- &l_tile_width,
+- &l_tile_height,
+- &l_nb_tiles_x,
+- &l_nb_tiles_y,
+- cio);
++ bResult = opj_read_header(cio, this->m_Internal->m_Dinfo, &l_image);
+
+ if (!bResult)
+ {
+@@ -283,14 +258,22 @@ JPEG2000ImageIO::ReadImageInformation()
+ << "Reason: Error whle reading image header");
+ }
+
++ // Image parameters - first tile
++ OPJ_INT32 l_tile_x0=l_image->x0;
++ OPJ_INT32 l_tile_y0=l_image->y0;
++
++ // Image parameters - tile width, height and number of tiles
++ OPJ_UINT32 l_tile_width=l_image->x1;
++ OPJ_UINT32 l_tile_height=l_image->y1;
++ OPJ_UINT32 l_nb_tiles=l_image->numcomps;
++
+ this->m_Internal->m_TileStartX = l_tile_x0;
+ this->m_Internal->m_TileStartY = l_tile_y0;
+
+ this->m_Internal->m_TileWidth = l_tile_width;
+ this->m_Internal->m_TileHeight = l_tile_height;
+
+- this->m_Internal->m_NumberOfTilesInX = l_nb_tiles_x;
+- this->m_Internal->m_NumberOfTilesInY = l_nb_tiles_y;
++ this->m_Internal->m_NumberOfTiles = l_nb_tiles;
+
+
+ itkDebugMacro(<< "Number of Components = " << l_image->numcomps);
+@@ -319,7 +302,7 @@ JPEG2000ImageIO::ReadImageInformation()
+ this->SetPixelType(IOPixelEnum::SCALAR);
+ break;
+ case 3:
+- if (l_image->color_space != CLRSPC_SRGB)
++ if (l_image->color_space != OPJ_CLRSPC_SRGB)
+ {
+ itkWarningMacro(<< "file does not specify color space, assuming sRGB");
+ }
+@@ -335,8 +318,7 @@ JPEG2000ImageIO::ReadImageInformation()
+ itkDebugMacro(<< "Tile Start Y = " << this->m_Internal->m_TileStartY);
+ itkDebugMacro(<< "Tile Width = " << this->m_Internal->m_TileWidth);
+ itkDebugMacro(<< "Tile Height = " << this->m_Internal->m_TileHeight);
+- itkDebugMacro(<< "Number of Tiles X = " << this->m_Internal->m_NumberOfTilesInX);
+- itkDebugMacro(<< "Number of Tiles Y = " << this->m_Internal->m_NumberOfTilesInY);
++ itkDebugMacro(<< "Number of Tiles = " << this->m_Internal->m_NumberOfTiles);
+
+ itkDebugMacro(<< "image->x1 = " << l_image->x1);
+ itkDebugMacro(<< "image->y1 = " << l_image->y1);
+@@ -349,7 +331,6 @@ JPEG2000ImageIO::ReadImageInformation()
+
+ /* close the byte stream */
+ opj_stream_destroy(cio);
+- fclose(l_file);
+
+ if (this->m_Internal->m_Dinfo)
+ {
+@@ -368,16 +349,7 @@ JPEG2000ImageIO::Read(void * buffer)
+ {
+ itkDebugMacro(<< "JPEG2000ImageIO::Read() Begin");
+
+- FILE * l_file = fopen(this->m_FileName.c_str(), "rb");
+-
+- if (!l_file)
+- {
+- itkExceptionMacro("JPEG2000ImageIO failed to open file for reading: " << this->GetFileName() << std::endl
+- << "Reason: "
+- << itksys::SystemTools::GetLastSystemError());
+- }
+-
+- opj_stream_t * l_stream = opj_stream_create_default_file_stream(l_file, true);
++ opj_stream_t * l_stream = opj_stream_create_default_file_stream(this->m_FileName.c_str(), true);
+ if (!l_stream)
+ {
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+@@ -397,12 +369,13 @@ JPEG2000ImageIO::Read(void * buffer)
+ {
+ /* JPEG-2000 codestream */
+ /* get a decoder handle */
+- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_J2K);
++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_J2K);
+ if (!this->m_Internal->m_Dinfo)
+ {
++ opj_stream_destroy(l_stream);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_decompress(CODEC_J2K) returns nullptr");
++ << "Reason: opj_create_decompress(OPJ_CODEC_J2K) returns nullptr");
+ }
+ break;
+ }
+@@ -410,12 +383,13 @@ JPEG2000ImageIO::Read(void * buffer)
+ {
+ /* JPEG 2000 compressed image data */
+ /* get a decoder handle */
+- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_JP2);
++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_JP2);
+ if (!this->m_Internal->m_Dinfo)
+ {
++ opj_stream_destroy(l_stream);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_decompress(CODEC_JP2) returns nullptr");
++ << "Reason: opj_create_decompress(OPJ_CODEC_JP2) returns nullptr");
+ }
+ break;
+ }
+@@ -423,17 +397,18 @@ JPEG2000ImageIO::Read(void * buffer)
+ {
+ /* JPEG 2000, JPIP */
+ /* get a decoder handle */
+- this->m_Internal->m_Dinfo = opj_create_decompress(CODEC_JPT);
++ this->m_Internal->m_Dinfo = opj_create_decompress(OPJ_CODEC_JPT);
+ if (!this->m_Internal->m_Dinfo)
+ {
++ opj_stream_destroy(l_stream);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_decompress(CODEC_JPT) returns nullptr");
++ << "Reason: opj_create_decompress(OPJ_CODEC_JPT) returns nullptr");
+ }
+ break;
+ }
+ default:
+- fclose(l_file);
++ opj_stream_destroy(l_stream);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: "
+ << this->GetFileName() << std::endl
+ << "Reason: "
+@@ -448,29 +423,13 @@ JPEG2000ImageIO::Read(void * buffer)
+ << "Reason: opj_setup_decoder returns false");
+ }
+
+- OPJ_INT32 l_tile_x0, l_tile_y0;
+-
+- OPJ_UINT32 l_tile_width;
+- OPJ_UINT32 l_tile_height;
+- OPJ_UINT32 l_nb_tiles_x;
+- OPJ_UINT32 l_nb_tiles_y;
+-
+- bool bResult = opj_read_header(this->m_Internal->m_Dinfo,
+- &l_image,
+- &l_tile_x0,
+- &l_tile_y0,
+- &l_tile_width,
+- &l_tile_height,
+- &l_nb_tiles_x,
+- &l_nb_tiles_y,
+- l_stream);
++ bool bResult = opj_read_header(l_stream, this->m_Internal->m_Dinfo,&l_image);
+
+ if (!bResult)
+ {
+ opj_destroy_codec(this->m_Internal->m_Dinfo);
+ this->m_Internal->m_Dinfo = nullptr;
+ opj_stream_destroy(l_stream);
+- fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl
+ << "Reason: opj_read_header returns false");
+ }
+@@ -499,7 +458,7 @@ JPEG2000ImageIO::Read(void * buffer)
+ itkDebugMacro(<< "p_end_x = " << p_end_x);
+ itkDebugMacro(<< "p_end_y = " << p_end_y);
+
+- bResult = opj_set_decode_area(this->m_Internal->m_Dinfo, p_start_x, p_start_y, p_end_x, p_end_y);
++ bResult = opj_set_decode_area(this->m_Internal->m_Dinfo, l_image, p_start_x, p_start_y, p_end_x, p_end_y);
+
+ itkDebugMacro(<< "opj_set_decode_area() after");
+
+@@ -508,7 +467,6 @@ JPEG2000ImageIO::Read(void * buffer)
+ opj_destroy_codec(this->m_Internal->m_Dinfo);
+ this->m_Internal->m_Dinfo = nullptr;
+ opj_stream_destroy(l_stream);
+- fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl
+ << "Reason: opj_set_decode_area returns false");
+ }
+@@ -525,13 +483,13 @@ JPEG2000ImageIO::Read(void * buffer)
+
+ OPJ_UINT32 l_max_data_size = 1000;
+
+- bool l_go_on = true;
++ int l_go_on = true; // should be OBJ_BOOL
+
+ auto * l_data = (OPJ_BYTE *)malloc(1000);
+
+ while (l_go_on)
+ {
+- bool tileHeaderRead = opj_read_tile_header(this->m_Internal->m_Dinfo,
++ bool tileHeaderRead = opj_read_tile_header(this->m_Internal->m_Dinfo, l_stream,
+ &l_tile_index,
+ &l_data_size,
+ &l_current_tile_x0,
+@@ -539,14 +497,12 @@ JPEG2000ImageIO::Read(void * buffer)
+ &l_current_tile_x1,
+ &l_current_tile_y1,
+ &l_nb_comps,
+- &l_go_on,
+- l_stream);
++ &l_go_on);
+
+ if (!tileHeaderRead)
+ {
+ free(l_data);
+ opj_stream_destroy(l_stream);
+- fclose(l_file);
+ opj_destroy_codec(this->m_Internal->m_Dinfo);
+ opj_image_destroy(l_image);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl
+@@ -571,7 +527,6 @@ JPEG2000ImageIO::Read(void * buffer)
+ if (!l_data)
+ {
+ opj_stream_destroy(l_stream);
+- fclose(l_file);
+ opj_destroy_codec(this->m_Internal->m_Dinfo);
+ opj_image_destroy(l_image);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl
+@@ -590,7 +545,6 @@ JPEG2000ImageIO::Read(void * buffer)
+ {
+ free(l_data);
+ opj_stream_destroy(l_stream);
+- fclose(l_file);
+ opj_destroy_codec(this->m_Internal->m_Dinfo);
+ opj_image_destroy(l_image);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl
+@@ -654,7 +608,6 @@ JPEG2000ImageIO::Read(void * buffer)
+ {
+ free(l_data);
+ opj_stream_destroy(l_stream);
+- fclose(l_file);
+ opj_destroy_codec(this->m_Internal->m_Dinfo);
+ opj_image_destroy(l_image);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl
+@@ -666,14 +619,12 @@ JPEG2000ImageIO::Read(void * buffer)
+ opj_destroy_codec(this->m_Internal->m_Dinfo);
+ this->m_Internal->m_Dinfo = nullptr;
+ opj_stream_destroy(l_stream);
+- fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to read file: " << this->GetFileName() << std::endl
+ << "Reason: error whle reading image");
+ }
+
+ /* close the byte stream */
+ opj_stream_destroy(l_stream);
+- fclose(l_file);
+
+ if (this->m_Internal->m_Dinfo)
+ {
+@@ -840,13 +791,13 @@ JPEG2000ImageIO ::Write(const void * buffer)
+
+ parameters.numresolution = numberOfResolutions;
+
+- OPJ_COLOR_SPACE color_space = CLRSPC_GRAY;
++ OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_GRAY;
+ opj_image_cmptparm_t cmptparms[3];
+
+ if (this->GetNumberOfComponents() == 3)
+ {
+
+- color_space = (this->GetPixelType() == IOPixelEnum::RGB) ? CLRSPC_SRGB : CLRSPC_UNSPECIFIED;
++ color_space = (this->GetPixelType() == IOPixelEnum::RGB) ? OPJ_CLRSPC_SRGB : OPJ_CLRSPC_UNSPECIFIED;
+
+ /* initialize image components */
+ memset(&cmptparms[0], 0, 3 * sizeof(opj_image_cmptparm_t));
+@@ -864,7 +815,7 @@ JPEG2000ImageIO ::Write(const void * buffer)
+
+ if (this->GetNumberOfComponents() == 1)
+ {
+- color_space = CLRSPC_GRAY;
++ color_space = OPJ_CLRSPC_GRAY;
+
+ /* initialize image components */
+ memset(&cmptparms[0], 0, sizeof(opj_image_cmptparm_t));
+@@ -940,32 +891,32 @@ JPEG2000ImageIO ::Write(const void * buffer)
+ opj_codec_t * cinfo = nullptr;
+ if (extension == ".j2k")
+ {
+- cinfo = opj_create_compress(CODEC_J2K);
++ cinfo = opj_create_compress(OPJ_CODEC_J2K);
+ if (!cinfo)
+ {
+ itkExceptionMacro("JPEG2000ImageIO failed to write file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_compress(CODEC_J2K) returns nullptr");
++ << "Reason: opj_create_compress(OPJ_CODEC_J2K) returns nullptr");
+ }
+ }
+ else if (extension == ".jp2")
+ {
+- cinfo = opj_create_compress(CODEC_JP2);
++ cinfo = opj_create_compress(OPJ_CODEC_JP2);
+ if (!cinfo)
+ {
+ itkExceptionMacro("JPEG2000ImageIO failed to write file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_compress(CODEC_JP2) returns nullptr");
++ << "Reason: opj_create_compress(OPJ_CODEC_JP2) returns nullptr");
+ }
+ }
+ else if (extension == ".jpt")
+ {
+- cinfo = opj_create_compress(CODEC_JPT);
++ cinfo = opj_create_compress(OPJ_CODEC_JPT);
+ if (!cinfo)
+ {
+ itkExceptionMacro("JPEG2000ImageIO failed to write file: "
+ << this->GetFileName() << std::endl
+- << "Reason: opj_create_compress(CODEC_JPT) returns nullptr");
++ << "Reason: opj_create_compress(OPJ_CODEC_JPT) returns nullptr");
+ }
+ }
+ else
+@@ -989,17 +940,9 @@ JPEG2000ImageIO ::Write(const void * buffer)
+ << "Reason: opj_setup_encoder returns false");
+ }
+
+- FILE * l_file = fopen(parameters.outfile, "wb");
+- if (!l_file)
+- {
+- itkExceptionMacro("JPEG2000ImageIO failed to open file for writing: " << this->GetFileName() << std::endl
+- << "Reason: "
+- << itksys::SystemTools::GetLastSystemError());
+- }
+-
+ /* open a byte stream for writing */
+ /* allocate memory for all tiles */
+- opj_stream_t * cio = opj_stream_create_default_file_stream(l_file, false);
++ opj_stream_t * cio = opj_stream_create_default_file_stream(parameters.outfile, false);
+ if (!cio)
+ {
+ itkExceptionMacro("JPEG2000ImageIO failed to write file: "
+@@ -1017,8 +960,7 @@ JPEG2000ImageIO ::Write(const void * buffer)
+ if (!bSuccess)
+ {
+ opj_stream_destroy(cio);
+- fclose(l_file);
+- itkExceptionMacro("JPEG2000ImageIO failed to write file: " << this->GetFileName() << std::endl
++ itkExceptionMacro("JPEG2000ImageIO failed to write file: " << this->GetFileName() << std::endl
+ << "Reason: opj_start_compress returns false");
+ }
+
+@@ -1026,7 +968,6 @@ JPEG2000ImageIO ::Write(const void * buffer)
+ if (!bSuccess)
+ {
+ opj_stream_destroy(cio);
+- fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to write file: " << this->GetFileName() << std::endl
+ << "Reason: opj_encode returns false");
+ }
+@@ -1035,14 +976,12 @@ JPEG2000ImageIO ::Write(const void * buffer)
+ if (!bSuccess)
+ {
+ opj_stream_destroy(cio);
+- fclose(l_file);
+ itkExceptionMacro("JPEG2000ImageIO failed to write file: " << this->GetFileName() << std::endl
+ << "Reason: opj_end_compress returns false");
+ }
+
+ /* close and free the byte stream */
+ opj_stream_destroy(cio);
+- fclose(l_file);
+
+ /* free remaining compression structures */
+ opj_destroy_codec(cinfo);
+diff --git a/Modules/ThirdParty/OpenJPEG/CMakeLists.txt b/Modules/ThirdParty/OpenJPEG/CMakeLists.txt
+index 103eaa9dd..eb8989135 100644
+--- a/Modules/ThirdParty/OpenJPEG/CMakeLists.txt
++++ b/Modules/ThirdParty/OpenJPEG/CMakeLists.txt
+@@ -1,12 +1,25 @@
+ project(ITKOpenJPEG)
+ set(ITKOpenJPEG_THIRD_PARTY 1)
+
+-set(ITKOpenJPEG_INCLUDE_DIRS
+- ${ITKOpenJPEG_BINARY_DIR}/src/openjpeg
+- ${ITKOpenJPEG_SOURCE_DIR}/src/openjpeg
+- )
+-set(ITKOpenJPEG_LIBRARIES itkopenjpeg)
+-set(ITK_LIBRARY_PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS FALSE)
++if(ITK_USE_SYSTEM_OpenJPEG)
++ find_package(OpenJPEG REQUIRED)
++ if(TARGET openjp2)
++ set(ITKOpenJPEG_LIBRARIES ${OPENJPEG_LIBRARIES})
++ else()
++ message(FATAL_ERROR "OpenJPEG target openjp2 missing!")
++ endif()
++ set(ITKOpenJPEG_INCLUDE_DIRS
++ ${ITKOpenJPEG_BINARY_DIR}/src/openjpeg
++ ${ITKOpenJPEG_SOURCE_DIR}/src/openjpeg
++ )
++else()
++ set(ITKOpenJPEG_INCLUDE_DIRS
++ ${ITKOpenJPEG_BINARY_DIR}/src/openjpeg
++ ${ITKOpenJPEG_SOURCE_DIR}/src/openjpeg
++ )
++ set(ITKOpenJPEG_LIBRARIES itkopenjpeg)
++ set(ITK_LIBRARY_PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS FALSE)
++endif()
+
+ itk_module_impl()
+