X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=OPJViewer%2Fsource%2Fimagj2k.cpp;h=4a7ed492d515fa86fbd06c3944cd31bb1998a8e0;hb=9ba672366e5dfc2151544b0ef9c51f1a81ae3194;hp=16bcdd1631a0dbb0eaa1874f89234ad7f6fc7eac;hpb=8a75823eeaa6f36c428a848d757e7d94ce4386f1;p=openjpeg.git diff --git a/OPJViewer/source/imagj2k.cpp b/OPJViewer/source/imagj2k.cpp index 16bcdd16..4a7ed492 100644 --- a/OPJViewer/source/imagj2k.cpp +++ b/OPJViewer/source/imagj2k.cpp @@ -51,10 +51,6 @@ #include "wx/module.h" #endif - -#include "libopenjpeg/openjpeg.h" - - #include "wx/filefn.h" #include "wx/wfstream.h" @@ -86,35 +82,29 @@ IMPLEMENT_DYNAMIC_CLASS(wxJ2KHandler,wxImageHandler) /* sample error callback expecting a FILE* client object */ void j2k_error_callback(const char *msg, void *client_data) { - char m_msg[MAX_MESSAGE_LEN]; int message_len = strlen(msg) - 1; if (msg[message_len] != '\n') message_len = MAX_MESSAGE_LEN; - sprintf(m_msg, "[ERROR] %.*s", message_len, msg); wxMutexGuiEnter(); - wxLogMessage(m_msg); + wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg); wxMutexGuiLeave(); } /* sample warning callback expecting a FILE* client object */ void j2k_warning_callback(const char *msg, void *client_data) { - char m_msg[MAX_MESSAGE_LEN]; int message_len = strlen(msg) - 1; if (msg[message_len] != '\n') message_len = MAX_MESSAGE_LEN; - sprintf(m_msg, "[WARNING] %.*s", message_len, msg); wxMutexGuiEnter(); - wxLogMessage(m_msg); + wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg); wxMutexGuiLeave(); } /* sample debug callback expecting no client object */ void j2k_info_callback(const char *msg, void *client_data) { - char m_msg[MAX_MESSAGE_LEN]; int message_len = strlen(msg) - 1; if (msg[message_len] != '\n') message_len = MAX_MESSAGE_LEN; - sprintf(m_msg, "[INFO] %.*s", message_len, msg); wxMutexGuiEnter(); - wxLogMessage(m_msg); + wxLogMessage(wxT("[INFO] %.*s"), message_len, msg); wxMutexGuiLeave(); } @@ -150,12 +140,18 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, strncpy(parameters.outfile, "", sizeof(parameters.outfile)-1); parameters.decod_format = J2K_CFMT; parameters.cod_format = BMP_DFMT; + if (m_reducefactor) + parameters.cp_reduce = m_reducefactor; + if (m_qualitylayers) + parameters.cp_layer = m_qualitylayers; + /*if (n_components) + parameters. = n_components;*/ /* JPWL only */ #ifdef USE_JPWL - parameters.jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS; - parameters.jpwl_max_tiles = JPWL_MAXIMUM_TILES; - parameters.jpwl_correct = true; + parameters.jpwl_exp_comps = m_expcomps; + parameters.jpwl_max_tiles = m_maxtiles; + parameters.jpwl_correct = m_enablejpwl; #endif /* USE_JPWL */ /* get a decoder handle */ @@ -183,7 +179,7 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, opjimage = opj_decode(dinfo, cio); if (!opjimage) { wxMutexGuiEnter(); - wxLogError("J2K: failed to decode image!"); + wxLogError(wxT("J2K: failed to decode image!")); wxMutexGuiLeave(); opj_destroy_decompress(dinfo); opj_cio_close(cio); @@ -198,7 +194,7 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, // check image components if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) { wxMutexGuiEnter(); - wxLogError("J2K: weird number of components"); + wxLogError(wxT("J2K: weird number of components")); wxMutexGuiLeave(); opj_destroy_decompress(dinfo); free(src); @@ -231,14 +227,26 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, } } - } else { + + } else if (shiftbpp < 0) { for (row = 0; row < opjimage->comps[0].h; row++) { for (col = 0; col < opjimage->comps[0].w; col++) { + *(ptr++) = (*(r++)) << -shiftbpp; + *(ptr++) = (*(g++)) << -shiftbpp; + *(ptr++) = (*(b++)) << -shiftbpp; + + } + } + + } else { + for (row = 0; row < opjimage->comps[0].h; row++) { + for (col = 0; col < opjimage->comps[0].w; col++) { + *(ptr++) = *(r++); *(ptr++) = *(g++); *(ptr++) = *(b++); - + } } } @@ -256,6 +264,16 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, *(ptr++) = (*(y)) >> shiftbpp; *(ptr++) = (*(y++)) >> shiftbpp; + } + } + } else if (shiftbpp < 0) { + for (row = 0; row < opjimage->comps[0].h; row++) { + for (col = 0; col < opjimage->comps[0].w; col++) { + + *(ptr++) = (*(y)) << -shiftbpp; + *(ptr++) = (*(y)) << -shiftbpp; + *(ptr++) = (*(y++)) << -shiftbpp; + } } } else {