workarounds for rendering differently sized components
authorGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Fri, 27 Apr 2007 17:20:26 +0000 (17:20 +0000)
committerGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Fri, 27 Apr 2007 17:20:26 +0000 (17:20 +0000)
OPJViewer/OPJViewer.dsp
OPJViewer/OPJViewer.iss
OPJViewer/source/OPJViewer.cpp
OPJViewer/source/OPJViewer.h
OPJViewer/source/imagj2k.cpp
OPJViewer/source/wxj2kparser.cpp

index 22a21e47d40bde75d28e79dc7dd5ec5116f8c830..b1aaad9a044993e2b4b049cac8fd914fb44c1ef3 100644 (file)
@@ -42,15 +42,15 @@ RSC=rc.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "c:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /c\r
+# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "d:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "d:\programmi\wxWidgets-2.8.0\include" /I ".." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /c\r
 # ADD BASE RSC /l 0x410 /d "NDEBUG"\r
-# ADD RSC /l 0x409 /i "c:\programmi\wxWidgets-2.8.0\include" /d "NDEBUG"\r
+# ADD RSC /l 0x409 /i "d:\programmi\wxWidgets-2.8.0\include" /d "NDEBUG"\r
 BSC32=bscmake.exe\r
 # ADD BASE BSC32 /nologo\r
 # ADD BSC32 /nologo\r
 LINK32=link.exe\r
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib wxzlib.lib wxregex.lib wxpng.lib wxjpeg.lib wxbase28.lib wxmsw28_core.lib wxmsw28_html.lib wxmsw28_adv.lib wxmsw28_core.lib wxbase28.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.lib LibOpenJPEG_JPWL.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libcmt.lib" /libpath:"c:\programmi\wxWidgets-2.8.0\lib\vc_lib" /libpath:"..\jpwl\Release" /IGNORE:4089\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib wxzlib.lib wxregex.lib wxpng.lib wxjpeg.lib wxbase28.lib wxmsw28_core.lib wxmsw28_html.lib wxmsw28_adv.lib wxmsw28_core.lib wxbase28.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.lib LibOpenJPEG_JPWL.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libcmt.lib" /libpath:"d:\programmi\wxWidgets-2.8.0\lib\vc_lib" /libpath:"..\jpwl\Release" /IGNORE:4089\r
 # SUBTRACT LINK32 /pdb:none\r
 \r
 !ELSEIF  "$(CFG)" == "OPJViewer - Win32 Debug"\r
index ed8e9b71582191c32767f664448fe3cffac8797d..1467e288055c2f66fa5bd7f3568500759ee64aeb 100644 (file)
@@ -3,7 +3,7 @@
 \r
 [Setup]\r
 AppName=OPJViewer\r
-AppVerName=OPJViewer 0.2 alpha\r
+AppVerName=OPJViewer 0.3 alpha\r
 AppPublisher=OpenJPEG\r
 AppPublisherURL=http://www.openjpeg.org\r
 AppSupportURL=http://www.openjpeg.org\r
@@ -11,13 +11,13 @@ AppUpdatesURL=http://www.openjpeg.org
 DefaultDirName={pf}\OPJViewer\r
 DefaultGroupName=OPJViewer\r
 OutputDir=setup\r
-OutputBaseFilename=OPJViewer02alpha_setup\r
+OutputBaseFilename=OPJViewer03alpha_setup\r
 Compression=lzma\r
 SolidCompression=true\r
 InfoBeforeFile=source\readmebefore.txt\r
 InfoAfterFile=source\readmeafter.txt\r
 LicenseFile=source\license.txt\r
-VersionInfoVersion=0.2.0.0\r
+VersionInfoVersion=0.3.0.0\r
 VersionInfoCompany=OpenJPEG\r
 VersionInfoDescription=JPEG 2000 viewer\r
 ShowLanguageDialog=yes\r
index bf7a2077bb5eadc4cf4555d0150f0a061fcaa6d6..fb98e24d45fb289d5ecff2ec4a59370d6a275cd5 100644 (file)
@@ -803,6 +803,7 @@ void OPJCanvas::OnDraw(wxDC& dc)
 // the left button.\r
 void OPJCanvas::OnEvent(wxMouseEvent& event)\r
 {\r
+#if USE_PENCIL_ON_CANVAS\r
   wxClientDC dc(this);\r
   PrepareDC(dc);\r
 \r
@@ -814,6 +815,7 @@ void OPJCanvas::OnEvent(wxMouseEvent& event)
   }\r
   xpos = pt.x;\r
   ypos = pt.y;\r
+#endif\r
 }\r
 \r
 void OPJFrame::OnSize(wxSizeEvent& WXUNUSED(event))\r
@@ -856,7 +858,9 @@ const long style):
        GetClientSize(&width, &height);\r
 \r
        OPJCanvas *canvas = new OPJCanvas(fname, this, wxPoint(0, 0), wxSize(width, height));\r
+#if USE_PENCIL_ON_CANVAS\r
        canvas->SetCursor(wxCursor(wxCURSOR_PENCIL));\r
+#endif\r
        m_canvas = canvas;\r
 \r
        // Give it scrollbars\r
index c1413b749846dc3000d57f6c7914a9a86f507ece..5de1814f807a197421fd22e12922feefd6c56029 100644 (file)
@@ -113,6 +113,7 @@ typedef unsigned long long int8byte;
 #endif // __WXGTK__\r
 \r
 #define USE_GENERIC_TREECTRL 0\r
+#define USE_PENCIL_ON_CANVAS 0\r
 \r
 #if USE_GENERIC_TREECTRL\r
 #include "wx/generic/treectlg.h"\r
@@ -124,7 +125,7 @@ typedef unsigned long long int8byte;
 \r
 #define OPJ_APPLICATION             wxT("OPJViewer")\r
 #define OPJ_APPLICATION_NAME           wxT("OpenJPEG Viewer")\r
-#define OPJ_APPLICATION_VERSION                wxT("0.2 alpha")\r
+#define OPJ_APPLICATION_VERSION                wxT("0.3 alpha")\r
 #define OPJ_APPLICATION_TITLEBAR       OPJ_APPLICATION_NAME wxT(" ") OPJ_APPLICATION_VERSION\r
 #define OPJ_APPLICATION_COPYRIGHT      wxT("(C) 2007, Giuseppe Baruffa")\r
 \r
index 65f9a42bbb8f2d49aab609217f14e9dc075af456..791cd2d80f886443752e7153747bcb2dc6e63b6f 100644 (file)
@@ -85,27 +85,27 @@ void j2k_error_callback(const char *msg, void *client_data) {
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-    /*wxMutexGuiEnter();\r
+    wxMutexGuiEnter();\r
        wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);\r
-    wxMutexGuiLeave();*/\r
+    wxMutexGuiLeave();\r
 }\r
 /* sample warning callback expecting a FILE* client object */\r
 void j2k_warning_callback(const char *msg, void *client_data) {\r
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-    /*wxMutexGuiEnter();\r
+    wxMutexGuiEnter();\r
        wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);\r
-    wxMutexGuiLeave();*/\r
+    wxMutexGuiLeave();\r
 }\r
 /* sample debug callback expecting no client object */\r
 void j2k_info_callback(const char *msg, void *client_data) {\r
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-    /*wxMutexGuiEnter();\r
+    wxMutexGuiEnter();\r
        wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);\r
-    wxMutexGuiLeave();*/\r
+    wxMutexGuiLeave();\r
 }\r
 \r
 // load the j2k codestream\r
@@ -118,6 +118,7 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
     unsigned char *ptr;\r
        int file_length;\r
        int shiftbpp;\r
+       int c, tempcomps;\r
 \r
        // destroy the image\r
     image->Destroy();\r
@@ -193,14 +194,6 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        opj_cio_close(cio);\r
 \r
        // check image components\r
-       if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) {\r
-               wxMutexGuiEnter();\r
-               wxLogError(wxT("J2K: weird number of components"));\r
-               wxMutexGuiLeave();\r
-               opj_destroy_decompress(dinfo);\r
-               free(src);\r
-               return false;\r
-       }\r
 \r
        // check image depth (only on the first one, for now)\r
        shiftbpp = opjimage->comps[0].prec - 8;\r
@@ -212,8 +205,34 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
     image->SetMask( false );\r
     ptr = image->GetData();\r
 \r
+       // workaround for components different from 1 or 3\r
+       if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) {\r
+               wxMutexGuiEnter();\r
+               wxLogMessage(wxT("J2K: weird number of components"));\r
+               tempcomps = 1;\r
+               wxMutexGuiLeave();\r
+       } else\r
+               tempcomps = opjimage->numcomps;\r
+\r
+       // workaround for subsampled components\r
+       for (c = 1; c < tempcomps; c++) {\r
+               if ((opjimage->comps[c].w != opjimage->comps[c - 1].w) || (opjimage->comps[c].h != opjimage->comps[c - 1].h)) {\r
+                       tempcomps = 1;\r
+                       break;\r
+               }\r
+       }\r
+\r
+       // workaround for different precision components\r
+       for (c = 1; c < tempcomps; c++) {\r
+               if (opjimage->comps[c].bpp != opjimage->comps[c - 1].bpp) {\r
+                       tempcomps = 1;\r
+                       break;\r
+               }\r
+       }\r
+\r
+\r
        // RGB color picture\r
-       if (opjimage->numcomps == 3) {\r
+       if (tempcomps == 3) {\r
                int row, col;\r
                int *r = opjimage->comps[0].data;\r
                int *g = opjimage->comps[1].data;\r
@@ -254,7 +273,7 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        }\r
 \r
        // B/W picture\r
-       if (opjimage->numcomps == 1) {\r
+       if (tempcomps == 1) {\r
                int row, col;\r
                int *y = opjimage->comps[0].data;\r
                if (shiftbpp > 0) {\r
index 02d8b4a5f64de0d179bc83412fbec178eded3fb9..69d89989d9a28451bf2ba59802c9a8d9fa3efd50 100644 (file)
@@ -201,9 +201,9 @@ void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOff
 \r
                        // randomly marker coincident data\r
                        if ((currmark != SOT_VAL) &&\r
-                               (currmark != EOC_VAL) /*&&\r
+                               (currmark != EOC_VAL) &&\r
                                (currmark != SOP_VAL) &&\r
-                               (currmark != EPH_VAL)*/) {\r
+                               (currmark != EPH_VAL)) {\r
                                OPJ_ADVANCE(1);\r
                                continue;\r
                        }\r