OPJViewer opens now BMP, PNG, GIF, PNM, TIFF (with wxWidgets internals); added an...
authorGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Sun, 3 Jun 2007 17:34:46 +0000 (17:34 +0000)
committerGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Sun, 3 Jun 2007 17:34:46 +0000 (17:34 +0000)
ChangeLog
OPJViewer/OPJViewer.dsp
OPJViewer/source/OPJViewer.cpp
OPJViewer/source/OPJViewer.h
OPJViewer/source/imagj2k.cpp
OPJViewer/source/imagjp2.cpp
OPJViewer/source/imagjpeg2000.cpp [new file with mode: 0644]
OPJViewer/source/imagmj2.cpp

index 3ab02b33f95675615f078d7e1bcab843ace8a7f4..3c6914603b5a00807040fff03eee6eb915bb3351 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
+June 2, 2007
++ [GB] OPJViewer opens now BMP, PNG, GIF, PNM, TIFF (with wxWidgets internals); added an encoder settings tab, for future integration with "save file as..." in JPEG 2000 format
+
 May 31, 2007
 * [FOD] Fixed the handling of 16bit TIFF files for cinema compression. Modified "convert.c"
 * [FOD] Fixed the parameters used for cinema compression (9-7 transform used instead of 5-3). Modified "image_to_j2k.c"
index b1aaad9a044993e2b4b049cac8fd914fb44c1ef3..c882690d83c5c37843aec9d72a19096bc51174e5 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 "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 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" /D "OPJ_MANYFORMATS" /FR /FD /c\r
 # ADD BASE RSC /l 0x410 /d "NDEBUG"\r
-# ADD RSC /l 0x409 /i "d:\programmi\wxWidgets-2.8.0\include" /d "NDEBUG"\r
+# ADD RSC /l 0x409 /i "c:\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:"d:\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:"c:\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
@@ -97,6 +97,11 @@ SOURCE=.\source\imagjp2.cpp
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\source\imagjpeg2000.cpp\r
+# PROP Exclude_From_Build 1\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\source\imagmj2.cpp\r
 # End Source File\r
 # Begin Source File\r
index fb98e24d45fb289d5ecff2ec4a59370d6a275cd5..356c28e88928242397cb4a91940fb28805930ae2 100644 (file)
@@ -193,6 +193,13 @@ bool OPJViewerApp::OnInit(void)
   wxImage::AddHandler( new wxJ2KHandler );\r
   wxImage::AddHandler( new wxJP2Handler );\r
   wxImage::AddHandler( new wxMJ2Handler );\r
+#endif\r
+#if OPJ_MANYFORMATS\r
+  wxImage::AddHandler( new wxBMPHandler );\r
+  wxImage::AddHandler( new wxPNGHandler );\r
+  wxImage::AddHandler( new wxGIFHandler );\r
+  wxImage::AddHandler( new wxPNMHandler );\r
+  wxImage::AddHandler( new wxTIFFHandler );\r
 #endif\r
     // we use a XPM image in our HTML page\r
     wxImage::AddHandler(new wxXPMHandler);\r
@@ -268,6 +275,7 @@ BEGIN_EVENT_TABLE(OPJFrame, wxMDIParentFrame)
     EVT_MENU(OPJFRAME_VIEWRELOAD, OPJFrame::OnReload)\r
     EVT_MENU(OPJFRAME_FILETOGGLEB, OPJFrame::OnToggleBrowser)\r
     EVT_MENU(OPJFRAME_FILETOGGLEP, OPJFrame::OnTogglePeeker)\r
+    EVT_MENU(OPJFRAME_SETSENCO, OPJFrame::OnSetsEnco)\r
     EVT_MENU(OPJFRAME_SETSDECO, OPJFrame::OnSetsDeco)\r
     EVT_SASH_DRAGGED_RANGE(OPJFRAME_BROWSEWIN, OPJFRAME_LOGWIN, OPJFrame::OnSashDrag)\r
     EVT_NOTEBOOK_PAGE_CHANGED(LEFT_NOTEBOOK_ID, OPJFrame::OnNotebook)\r
@@ -311,6 +319,9 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
        // settings menu and its items\r
        wxMenu *sets_menu = new wxMenu;\r
 \r
+       sets_menu->Append(OPJFRAME_SETSENCO, wxT("&Encoder\tCtrl+E"));\r
+       sets_menu->SetHelpString(OPJFRAME_SETSENCO, wxT("Encoder settings"));\r
+\r
        sets_menu->Append(OPJFRAME_SETSDECO, wxT("&Decoder\tCtrl+D"));\r
        sets_menu->SetHelpString(OPJFRAME_SETSDECO, wxT("Decoder settings"));\r
 \r
@@ -444,6 +455,15 @@ void OPJFrame::Resize(int number)
        wxSize size = GetClientSize();\r
 }\r
 \r
+void OPJFrame::OnSetsEnco(wxCommandEvent& event)\r
+{\r
+    OPJEncoderDialog dialog(this, event.GetId());\r
+\r
+    if (dialog.ShowModal() == wxID_OK) {\r
+\r
+       };\r
+}\r
+\r
 void OPJFrame::OnSetsDeco(wxCommandEvent& event)\r
 {\r
     OPJDecoderDialog dialog(this, event.GetId());\r
@@ -717,9 +737,22 @@ void OPJFrame::OnFileOpen(wxCommandEvent& WXUNUSED(event))
 #ifdef __WXMOTIF__\r
        wxT("JPEG 2000 files (*.jp2,*.j2k,*.j2c,*.mj2)|*.*j*2*");\r
 #else\r
-       wxT("JPEG 2000 files (*.jp2,*.j2k,*.j2c,*.mj2)|*.jp2;*.j2k;*.j2c;*.mj2|JPEG files (*.jpg)|*.jpg|All files|*");\r
+#if wxUSE_LIBOPENJPEG\r
+       wxT("JPEG 2000 files (*.jp2,*.j2k,*.j2c,*.mj2)|*.jp2;*.j2k;*.j2c;*.mj2")\r
 #endif\r
-    wxFileDialog dialog(this, _T("Open JPEG 2000 file(s)"),\r
+#if wxUSE_LIBJPEG\r
+               wxT("|JPEG files (*.jpg)|*.jpg")\r
+#endif\r
+#if OPJ_MANYFORMATS\r
+               wxT("|BMP files (*.bmp)|*.bmp")\r
+               wxT("|PNG files (*.png)|*.png")\r
+               wxT("|GIF files (*.gif)|*.gif")\r
+               wxT("|PNM files (*.pnm)|*.pnm")\r
+               wxT("|TIFF files (*.tif,*.tiff)|*.tif*")\r
+#endif\r
+               wxT("|All files|*");\r
+#endif\r
+    wxFileDialog dialog(this, _T("Open image file(s)"),\r
                         wxEmptyString, wxEmptyString, wildcards,\r
                         wxFD_OPEN|wxFD_MULTIPLE);\r
 \r
@@ -2082,110 +2115,6 @@ OPJDecoderDialog::~OPJDecoderDialog()
 {\r
 }\r
 \r
-/*wxPanel* OPJDecoderDialog::CreateGeneralSettingsPage(wxWindow* parent)\r
-{\r
-    wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
-\r
-    wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );\r
-    wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );\r
-\r
-    //// LOAD LAST FILE\r
-\r
-    wxBoxSizer* itemSizer3 = new wxBoxSizer( wxHORIZONTAL );\r
-    wxCheckBox* checkBox3 = new wxCheckBox(panel, ID_LOAD_LAST_PROJECT, _("&Load last project on startup"), wxDefaultPosition, wxDefaultSize);\r
-    itemSizer3->Add(checkBox3, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
-    item0->Add(itemSizer3, 0, wxGROW|wxALL, 0);\r
-\r
-    //// AUTOSAVE\r
-\r
-    wxString autoSaveLabel = _("&Auto-save every");\r
-    wxString minsLabel = _("mins");\r
-\r
-    wxBoxSizer* itemSizer12 = new wxBoxSizer( wxHORIZONTAL );\r
-    wxCheckBox* checkBox12 = new wxCheckBox(panel, ID_AUTO_SAVE, autoSaveLabel, wxDefaultPosition, wxDefaultSize);\r
-\r
-    wxSpinCtrl* spinCtrl12 = new wxSpinCtrl(panel, ID_AUTO_SAVE_MINS, wxEmptyString,\r
-        wxDefaultPosition, wxSize(40, wxDefaultCoord), wxSP_ARROW_KEYS, 1, 60, 1);\r
-\r
-    itemSizer12->Add(checkBox12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
-    itemSizer12->Add(spinCtrl12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
-    itemSizer12->Add(new wxStaticText(panel, wxID_STATIC, minsLabel), 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
-    item0->Add(itemSizer12, 0, wxGROW|wxALL, 0);\r
-\r
-    //// TOOLTIPS\r
-\r
-    wxBoxSizer* itemSizer8 = new wxBoxSizer( wxHORIZONTAL );\r
-    wxCheckBox* checkBox6 = new wxCheckBox(panel, ID_SHOW_TOOLTIPS, _("Show &tooltips"), wxDefaultPosition, wxDefaultSize);\r
-    itemSizer8->Add(checkBox6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
-    item0->Add(itemSizer8, 0, wxGROW|wxALL, 0);\r
-\r
-    topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );\r
-\r
-    panel->SetSizer(topSizer);\r
-    topSizer->Fit(panel);\r
-\r
-    return panel;\r
-}*/\r
-\r
-/*wxPanel* OPJDecoderDialog::CreateAestheticSettingsPage(wxWindow* parent)\r
-{\r
-    wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
-\r
-    wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );\r
-    wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );\r
-\r
-    //// PROJECT OR GLOBAL\r
-    wxString globalOrProjectChoices[2];\r
-    globalOrProjectChoices[0] = _("&New projects");\r
-    globalOrProjectChoices[1] = _("&This project");\r
-\r
-    wxRadioBox* projectOrGlobal = new wxRadioBox(panel, ID_APPLY_SETTINGS_TO, _("&Apply settings to:"),\r
-        wxDefaultPosition, wxDefaultSize, 2, globalOrProjectChoices);\r
-    item0->Add(projectOrGlobal, 0, wxGROW|wxALL, 5);\r
-\r
-    projectOrGlobal->SetSelection(0);\r
-\r
-    //// BACKGROUND STYLE\r
-    wxArrayString backgroundStyleChoices;\r
-    backgroundStyleChoices.Add(wxT("Colour"));\r
-    backgroundStyleChoices.Add(wxT("Image"));\r
-    wxStaticBox* staticBox3 = new wxStaticBox(panel, wxID_ANY, _("Background style:"));\r
-\r
-    wxBoxSizer* styleSizer = new wxStaticBoxSizer( staticBox3, wxVERTICAL );\r
-    item0->Add(styleSizer, 0, wxGROW|wxALL, 5);\r
-\r
-    wxBoxSizer* itemSizer2 = new wxBoxSizer( wxHORIZONTAL );\r
-\r
-    wxChoice* choice2 = new wxChoice(panel, ID_BACKGROUND_STYLE, wxDefaultPosition, wxDefaultSize, backgroundStyleChoices);\r
-\r
-    itemSizer2->Add(new wxStaticText(panel, wxID_ANY, _("&Window:")), 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
-    itemSizer2->Add(5, 5, 1, wxALL, 0);\r
-    itemSizer2->Add(choice2, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-    styleSizer->Add(itemSizer2, 0, wxGROW|wxALL, 5);\r
-\r
-#if wxUSE_SPINCTRL\r
-    //// FONT SIZE SELECTION\r
-\r
-    wxStaticBox* staticBox1 = new wxStaticBox(panel, wxID_ANY, _("Tile font size:"));\r
-    wxBoxSizer* itemSizer5 = new wxStaticBoxSizer( staticBox1, wxHORIZONTAL );\r
-\r
-    wxSpinCtrl* spinCtrl = new wxSpinCtrl(panel, ID_FONT_SIZE, wxEmptyString, wxDefaultPosition,\r
-        wxSize(80, wxDefaultCoord));\r
-    itemSizer5->Add(spinCtrl, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-    item0->Add(itemSizer5, 0, wxGROW|wxLEFT|wxRIGHT, 5);\r
-#endif\r
-\r
-    topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );\r
-    topSizer->AddSpacer(5);\r
-\r
-    panel->SetSizer(topSizer);\r
-    topSizer->Fit(panel);\r
-\r
-    return panel;\r
-}*/\r
-\r
 wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)\r
 {\r
     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
@@ -2348,7 +2277,7 @@ wxPanel* OPJDecoderDialog::CreatePart1SettingsPage(wxWindow* parent)
                                wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
 \r
                                // add some text\r
-                               numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&No. of components:")),\r
+                               numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")),\r
                                                                0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
 \r
                                // add some horizontal space\r
@@ -2362,7 +2291,7 @@ wxPanel* OPJDecoderDialog::CreatePart1SettingsPage(wxWindow* parent)
                                                                wxSP_ARROW_KEYS,\r
                                                                0, 100000, wxGetApp().m_components),\r
                                        0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
-                               m_numcompsCtrl->Enable(false);\r
+                               m_numcompsCtrl->Enable(true);\r
 \r
                        compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);\r
 \r
@@ -2516,3 +2445,525 @@ bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)
     return true;\r
 }\r
 \r
+\r
+\r
+\r
+\r
+// ----------------------------------------------------------------------------\r
+// OPJEncoderDialog\r
+// ----------------------------------------------------------------------------\r
+\r
+IMPLEMENT_CLASS(OPJEncoderDialog, wxPropertySheetDialog)\r
+\r
+BEGIN_EVENT_TABLE(OPJEncoderDialog, wxPropertySheetDialog)\r
+#ifdef USE_JPWL\r
+       EVT_CHECKBOX(OPJENCO_ENABLEJPWL, OPJEncoderDialog::OnEnableJPWL)\r
+#endif // USE_JPWL\r
+END_EVENT_TABLE()\r
+\r
+OPJEncoderDialog::OPJEncoderDialog(wxWindow* win, int dialogType)\r
+{\r
+       SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
+\r
+       Create(win, wxID_ANY, wxT("Encoder settings"),\r
+               wxDefaultPosition, wxDefaultSize,\r
+               wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)\r
+               );\r
+\r
+       CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
+\r
+       m_settingsNotebook = GetBookCtrl();\r
+\r
+       wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);\r
+       wxPanel* jpeg2000Settings = CreatePart1SettingsPage(m_settingsNotebook);\r
+/*     if (!wxGetApp().m_enabledeco)\r
+               jpeg2000Settings->Enable(false);\r
+       wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(m_settingsNotebook);\r
+       if (!wxGetApp().m_enabledeco)\r
+               mjpeg2000Settings->Enable(false);\r
+#ifdef USE_JPWL\r
+       wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);\r
+       if (!wxGetApp().m_enabledeco)\r
+               jpwlSettings->Enable(false);\r
+#endif // USE_JPWL\r
+*/\r
+\r
+       m_settingsNotebook->AddPage(mainSettings, wxT("General"), false);\r
+       m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);\r
+/*     m_settingsNotebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false);\r
+#ifdef USE_JPWL\r
+       m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
+#endif // USE_JPWL\r
+*/\r
+       LayoutDialog();\r
+}\r
+\r
+OPJEncoderDialog::~OPJEncoderDialog()\r
+{\r
+}\r
+\r
+wxPanel* OPJEncoderDialog::CreateMainSettingsPage(wxWindow* parent)\r
+{\r
+    wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+       // top sizer\r
+    wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+               // sub top sizer\r
+               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+       topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
+\r
+       // assign top and fit it\r
+    panel->SetSizer(topSizer);\r
+    topSizer->Fit(panel);\r
+\r
+    return panel;\r
+}\r
+\r
+wxPanel* OPJEncoderDialog::CreatePart1SettingsPage(wxWindow* parent)\r
+{\r
+    wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+       // top sizer\r
+    wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+       // add some space\r
+       //topSizer->AddSpacer(5);\r
+\r
+               // sub top sizer\r
+               wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);\r
+\r
+                       // image settings, column\r
+                       wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image"));\r
+                       wxBoxSizer* imageSizer = new wxStaticBoxSizer(imageBox, wxVERTICAL);\r
+\r
+                               // subsampling factor sizer, row\r
+                               wxBoxSizer* subsSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               subsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Subsampling:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               subsSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               subsSizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_SUBSAMPLING,\r
+                                                               wxT("1,1"),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       imageSizer->Add(subsSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // origin sizer, row\r
+                               wxBoxSizer* imorigSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               imorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               imorigSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               imorigSizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_IMORIG,\r
+                                                               wxT("0,0"),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       imageSizer->Add(imorigSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(imageSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // layer settings, column\r
+                       wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers"));\r
+                       wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);\r
+\r
+                               // rate factor sizer, row\r
+                               wxBoxSizer* rateSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               rateSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Rate values:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               rateSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               rateSizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_RATEFACTOR,\r
+                                                               wxT("20,10,5"),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       layerSizer->Add(rateSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // quality factor sizer, row\r
+                               wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality values:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               qualitySizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               qualitySizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_QUALITYFACTOR,\r
+                                                               wxT("30,35,40"),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // wavelet settings, column\r
+                       wxStaticBox* waveletBox = new wxStaticBox(panel, wxID_ANY, wxT("Transform"));\r
+                       wxBoxSizer* waveletSizer = new wxStaticBoxSizer(waveletBox, wxVERTICAL);\r
+\r
+                       // irreversible check box\r
+                       waveletSizer->Add(\r
+                               /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEIRREV, wxT("Irreversible"),\r
+                               wxDefaultPosition, wxDefaultSize),\r
+                               0, wxGROW | wxALL, 3);\r
+                       /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                               // resolution number sizer, row\r
+                               wxBoxSizer* resnumSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               resnumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Resolutions:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               resnumSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               resnumSizer->Add(\r
+                                       /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_RESNUMBER,\r
+                                                               wxT("6"),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 256, 6),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       waveletSizer->Add(resnumSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // codeblock sizer, row\r
+                               wxBoxSizer* codeblockSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               codeblockSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Codeblocks size:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               codeblockSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               codeblockSizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_CODEBLOCKSIZE,\r
+                                                               wxT("32,32"),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       waveletSizer->Add(codeblockSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // precinct sizer, row\r
+                               wxBoxSizer* precinctSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               precinctSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Precincts size:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               precinctSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               precinctSizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_PRECINCTSIZE,\r
+                                                               wxT("[128,128],[128,128]"),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       waveletSizer->Add(precinctSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(waveletSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // tile settings, column\r
+                       wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));\r
+                       wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);\r
+\r
+                               // tile size sizer, row\r
+                               wxBoxSizer* tilesizeSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               tilesizeSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Size:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               tilesizeSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               tilesizeSizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_TILESIZE,\r
+                                                               wxT(""),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       tileSizer->Add(tilesizeSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // tile origin sizer, row\r
+                               wxBoxSizer* tilorigSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               tilorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               tilorigSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               tilorigSizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_TILORIG,\r
+                                                               wxT("0,0"),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       tileSizer->Add(tilorigSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // progression settings, column\r
+                       wxString choices[] = {wxT("LRCP"), wxT("RLCP"), wxT("RPCL"), wxT("PCRL"), wxT("CPRL")};\r
+                       wxRadioBox *progressionBox = new wxRadioBox(panel, OPJENCO_PROGRESSION,\r
+                               wxT("Progression"),\r
+                               wxDefaultPosition, wxDefaultSize,\r
+                               WXSIZEOF(choices),\r
+                               choices,\r
+                               4,\r
+                               wxRA_SPECIFY_COLS);\r
+                       progressionBox->SetSelection(0);\r
+\r
+               subtopSizer->Add(progressionBox, 0, wxGROW | wxALL, 3);\r
+\r
+                       // resilience settings, column\r
+                       wxStaticBox* resilBox = new wxStaticBox(panel, wxID_ANY, wxT("Resilience"));\r
+                       wxBoxSizer* resilSizer = new wxStaticBoxSizer(resilBox, wxVERTICAL);\r
+\r
+                               // resil2 sizer, row\r
+                               wxBoxSizer* resil2Sizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // SOP check box\r
+                               resil2Sizer->Add(\r
+                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLESOP, wxT("SOP"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                               // EPH check box\r
+                               resil2Sizer->Add(\r
+                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEEPH, wxT("EPH"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                       resilSizer->Add(resil2Sizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // separation\r
+                       resilSizer->Add(new wxStaticLine(panel, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 3);\r
+\r
+                               // resil3 sizer, row\r
+                               wxFlexGridSizer* resil3Sizer = new wxFlexGridSizer(3, 3, 3);\r
+\r
+                               // BYPASS check box\r
+                               resil3Sizer->Add(\r
+                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEBYPASS, wxT("BYPASS"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                               // RESET check box\r
+                               resil3Sizer->Add(\r
+                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLERESET, wxT("RESET"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                               // RESTART check box\r
+                               resil3Sizer->Add(\r
+                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLERESTART, wxT("RESTART"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                               // VSC check box\r
+                               resil3Sizer->Add(\r
+                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEVSC, wxT("VSC"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                               // ERTERM check box\r
+                               resil3Sizer->Add(\r
+                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEERTERM, wxT("ERTERM"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                               // SEGMARK check box\r
+                               resil3Sizer->Add(\r
+                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLESEGMARK, wxT("SEGMARK"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                       resilSizer->Add(resil3Sizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(resilSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // ROI settings, column\r
+                       wxStaticBox* roiBox = new wxStaticBox(panel, wxID_ANY, wxT("ROI"));\r
+                       wxBoxSizer* roiSizer = new wxStaticBoxSizer(roiBox, wxVERTICAL);\r
+\r
+                               // component number sizer, row\r
+                               wxBoxSizer* roicompSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               roicompSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               roicompSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               roicompSizer->Add(\r
+                                       /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROICOMP,\r
+                                                               wxT("0"),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 256, 0),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       roiSizer->Add(roicompSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // upshift sizer, row\r
+                               wxBoxSizer* roishiftSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               roishiftSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Upshift:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               roishiftSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               roishiftSizer->Add(\r
+                                       /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROISHIFT,\r
+                                                               wxT("0"),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 37, 0),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       roiSizer->Add(roishiftSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // ROI settings, column\r
+                       wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing"));\r
+                       wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL);\r
+\r
+                       // indexing check box\r
+                       indexSizer->Add(\r
+                               /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEINDEX, wxT("Enabled"),\r
+                               wxDefaultPosition, wxDefaultSize),\r
+                               0, wxGROW | wxALL, 3);\r
+                       /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
+\r
+                               // index file sizer, row\r
+                               wxBoxSizer* indexnameSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               indexnameSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&File name:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               indexnameSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               indexnameSizer->Add(\r
+                                       /*m_rateCtrl = */new wxTextCtrl(panel, OPJENCO_INDEXNAME,\r
+                                                               wxT(""),\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       indexSizer->Add(indexnameSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(indexSizer, 0, wxGROW | wxALL, 3);\r
+\r
+/*                     // component settings, column\r
+                       wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
+                       wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
+\r
+                               // quality layers sizer, row\r
+                               wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                               // add some horizontal space\r
+                               numcompsSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               numcompsSizer->Add(\r
+                                       m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS,\r
+                                                               wxString::Format(wxT("%d"), wxGetApp().m_components),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 100000, wxGetApp().m_components),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+                               m_numcompsCtrl->Enable(true);\r
+\r
+                       compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);\r
+\r
+               subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\r
+*/\r
+       topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
+\r
+       // assign top and fit it\r
+    panel->SetSizer(topSizer);\r
+    topSizer->Fit(panel);\r
+\r
+    return panel;\r
+}\r
+\r
+#ifdef USE_JPWL\r
+void OPJEncoderDialog::OnEnableJPWL(wxCommandEvent& event)\r
+{\r
+       /*if (event.IsChecked()) {\r
+               wxLogMessage(wxT("JPWL enabled"));\r
+               m_expcompsCtrl->Enable(true);\r
+               m_maxtilesCtrl->Enable(true);\r
+       } else {\r
+               wxLogMessage(wxT("JPWL disabled"));\r
+               m_expcompsCtrl->Enable(false);\r
+               m_maxtilesCtrl->Enable(false);\r
+       }*/\r
+\r
+}\r
+#endif // USE_JPWL\r
index 5de1814f807a197421fd22e12922feefd6c56029..7757ec73b81eba7792634d8a77ce69de8bfb2348 100644 (file)
@@ -371,6 +371,7 @@ class OPJFrame: public wxMDIParentFrame
        void OnToggleBrowser(wxCommandEvent& WXUNUSED(event));\r
        void OnTogglePeeker(wxCommandEvent& WXUNUSED(event));\r
        void OnReload(wxCommandEvent& event);\r
+       void OnSetsEnco(wxCommandEvent& event);\r
        void OnSetsDeco(wxCommandEvent& event);\r
        void OnSashDrag(wxSashEvent& event);\r
        void OpenFiles(wxArrayString paths, wxArrayString filenames);\r
@@ -434,6 +435,7 @@ enum {
        OPJFRAME_VIEWFIT,\r
        OPJFRAME_VIEWRELOAD,\r
        OPJFRAME_FILECLOSE,\r
+       OPJFRAME_SETSENCO,\r
        OPJFRAME_SETSDECO,\r
 \r
        OPJFRAME_BROWSEWIN = 10000,\r
@@ -556,7 +558,59 @@ private:
 \r
 \r
 \r
-// Property sheet dialog\r
+// Property sheet dialog: encoder\r
+class OPJEncoderDialog: public wxPropertySheetDialog\r
+{\r
+DECLARE_CLASS(OPJEncoderDialog)\r
+public:\r
+    OPJEncoderDialog(wxWindow* parent, int dialogType);\r
+    ~OPJEncoderDialog();\r
+\r
+       wxBookCtrlBase* m_settingsNotebook;\r
+\r
+    wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
+    wxPanel* CreatePart1SettingsPage(wxWindow* parent);\r
+/*    wxPanel* CreatePart3SettingsPage(wxWindow* parent);*/\r
+#ifdef USE_JPWL\r
+       void OnEnableJPWL(wxCommandEvent& event);\r
+/*    wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
+       wxCheckBox *m_enablejpwlCheck;*/\r
+#endif // USE_JPWL\r
+\r
+\r
+protected:\r
+\r
+    enum {\r
+               OPJENCO_ENABLEJPWL = 100,\r
+               OPJENCO_RATEFACTOR,\r
+               OPJENCO_QUALITYFACTOR,\r
+               OPJENCO_RESNUMBER,\r
+               OPJENCO_CODEBLOCKSIZE,\r
+               OPJENCO_PRECINCTSIZE,\r
+               OPJENCO_TILESIZE,\r
+               OPJENCO_PROGRESSION,\r
+               OPJENCO_SUBSAMPLING,\r
+               OPJENCO_ENABLESOP,\r
+               OPJENCO_ENABLEEPH,\r
+               OPJENCO_ENABLEBYPASS,\r
+               OPJENCO_ENABLERESET,\r
+               OPJENCO_ENABLERESTART,\r
+               OPJENCO_ENABLEVSC,\r
+               OPJENCO_ENABLEERTERM,\r
+               OPJENCO_ENABLESEGMARK,\r
+               OPJENCO_ROICOMP,\r
+               OPJENCO_ROISHIFT,\r
+               OPJENCO_IMORIG,\r
+               OPJENCO_TILORIG,\r
+               OPJENCO_ENABLEIRREV,\r
+               OPJENCO_ENABLEINDEX,\r
+               OPJENCO_INDEXNAME\r
+    };\r
+\r
+DECLARE_EVENT_TABLE()\r
+};\r
+\r
+// Property sheet dialog: decoder\r
 class OPJDecoderDialog: public wxPropertySheetDialog\r
 {\r
 DECLARE_CLASS(OPJDecoderDialog)\r
index 791cd2d80f886443752e7153747bcb2dc6e63b6f..7897ee3ce10a97eb0609921f2f3699221eb3bf4c 100644 (file)
@@ -85,27 +85,41 @@ 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
+#ifndef __WXGTK__ \r
     wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\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
+#ifndef __WXGTK__ \r
     wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\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
+#ifndef __WXGTK__ \r
     wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\r
 \r
 // load the j2k codestream\r
@@ -117,8 +131,6 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        unsigned char *src = NULL;\r
     unsigned char *ptr;\r
        int file_length;\r
-       int shiftbpp;\r
-       int c, tempcomps;\r
 \r
        // destroy the image\r
     image->Destroy();\r
@@ -146,8 +158,6 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
                parameters.cp_reduce = m_reducefactor;\r
        if (m_qualitylayers)\r
                parameters.cp_layer = m_qualitylayers;\r
-       /*if (n_components)\r
-               parameters. = n_components;*/\r
 \r
        /* JPWL only */\r
 #ifdef USE_JPWL\r
@@ -180,9 +190,13 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        /* decode the stream and fill the image structure */\r
        opjimage = opj_decode(dinfo, cio);\r
        if (!opjimage) {\r
+#ifndef __WXGTK__ \r
                wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
                wxLogError(wxT("J2K: failed to decode image!"));\r
+#ifndef __WXGTK__ \r
                wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
                opj_destroy_decompress(dinfo);\r
                opj_cio_close(cio);\r
                opj_image_destroy(opjimage);\r
@@ -193,125 +207,16 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        /* close the byte stream */\r
        opj_cio_close(cio);\r
 \r
-       // check image components\r
-\r
-       // check image depth (only on the first one, for now)\r
-       shiftbpp = opjimage->comps[0].prec - 8;\r
-\r
-       // prepare image size\r
-    image->Create(opjimage->comps[0].w, opjimage->comps[0].h, true );\r
-\r
-       // access image raw data\r
-    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 (tempcomps == 3) {\r
-               int row, col;\r
-               int *r = opjimage->comps[0].data;\r
-               int *g = opjimage->comps[1].data;\r
-               int *b = opjimage->comps[2].data;\r
-               if (shiftbpp > 0) {\r
-                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                                       \r
-                                       *(ptr++) = (*(r++)) >> shiftbpp;\r
-                                       *(ptr++) = (*(g++)) >> shiftbpp;\r
-                                       *(ptr++) = (*(b++)) >> shiftbpp;\r
-\r
-                               }\r
-                       }\r
-\r
-               } else if (shiftbpp < 0) {\r
-                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                                       \r
-                                       *(ptr++) = (*(r++)) << -shiftbpp;\r
-                                       *(ptr++) = (*(g++)) << -shiftbpp;\r
-                                       *(ptr++) = (*(b++)) << -shiftbpp;\r
-\r
-                               }\r
-                       }\r
-                       \r
-               } else {\r
-                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
-\r
-                                       *(ptr++) = *(r++);\r
-                                       *(ptr++) = *(g++);\r
-                                       *(ptr++) = *(b++);\r
-                               \r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       // B/W picture\r
-       if (tempcomps == 1) {\r
-               int row, col;\r
-               int *y = opjimage->comps[0].data;\r
-               if (shiftbpp > 0) {\r
-                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                                       \r
-                                       *(ptr++) = (*(y)) >> shiftbpp;\r
-                                       *(ptr++) = (*(y)) >> shiftbpp;\r
-                                       *(ptr++) = (*(y++)) >> shiftbpp;\r
-\r
-                               }\r
-                       }\r
-               } else if (shiftbpp < 0) {\r
-                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                                       \r
-                                       *(ptr++) = (*(y)) << -shiftbpp;\r
-                                       *(ptr++) = (*(y)) << -shiftbpp;\r
-                                       *(ptr++) = (*(y++)) << -shiftbpp;\r
-\r
-                               }\r
-                       }\r
-               } else {\r
-                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                                       \r
-                                       *(ptr++) = *(y);\r
-                                       *(ptr++) = *(y);\r
-                                       *(ptr++) = *(y++);\r
-\r
-                               }\r
-                       }\r
-               }\r
-       }\r
+       /* common rendering method */\r
+#include "imagjpeg2000.cpp"\r
 \r
+#ifndef __WXGTK__ \r
     wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
     wxLogMessage(wxT("J2K: image loaded."));\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 \r
        /* close openjpeg structs */\r
        opj_destroy_decompress(dinfo);\r
@@ -328,7 +233,14 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
 // save the j2k codestream\r
 bool wxJ2KHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbose )\r
 {\r
+#ifndef __WXGTK__ \r
+    wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
     wxLogError(wxT("J2K: Couldn't save image -> not implemented."));\r
+#ifndef __WXGTK__ \r
+    wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
+\r
     return false;\r
 }\r
 \r
index 849c6e453580dc86ba78a3361890e380aec38730..70be1555f73e143e5a288d11b4a62ef0bc83a4d4 100644 (file)
@@ -89,30 +89,43 @@ void jp2_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
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\r
+\r
 /* sample warning callback expecting a FILE* client object */\r
 void jp2_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
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\r
+\r
 /* sample debug callback expecting no client object */\r
 void jp2_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
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\r
 \r
-\r
 // load the jp2 file format\r
 bool wxJP2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index)\r
 {\r
@@ -182,9 +195,13 @@ bool wxJP2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        /* decode the stream and fill the image structure */\r
        opjimage = opj_decode(dinfo, cio);\r
        if (!opjimage) {\r
+#ifndef __WXGTK__ \r
                wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
                wxLogError(wxT("JP2: failed to decode image!"));\r
+#ifndef __WXGTK__ \r
                wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
                opj_destroy_decompress(dinfo);\r
                opj_cio_close(cio);\r
                free(src);\r
@@ -194,59 +211,16 @@ bool wxJP2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        /* close the byte stream */\r
        opj_cio_close(cio);\r
 \r
-       // check image size\r
-       if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) {\r
-               wxMutexGuiEnter();\r
-               wxLogError(wxT("JP2: weird number of components"));\r
-               wxMutexGuiLeave();\r
-               opj_destroy_decompress(dinfo);\r
-               free(src);\r
-               return false;\r
-       }\r
+       /* common rendering method */\r
+#include "imagjpeg2000.cpp"\r
 \r
-\r
-       // prepare image size\r
-    image->Create(opjimage->comps[0].w, opjimage->comps[0].h, true );\r
-\r
-       // access image raw data\r
-    image->SetMask( false );\r
-    ptr = image->GetData();\r
-\r
-       // RGB color picture\r
-       if (opjimage->numcomps == 3) {\r
-               int row, col;\r
-               int *r = opjimage->comps[0].data;\r
-               int *g = opjimage->comps[1].data;\r
-               int *b = opjimage->comps[2].data;\r
-               for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                       for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                               \r
-                               *(ptr++) = *(r++);\r
-                               *(ptr++) = *(g++);\r
-                               *(ptr++) = *(b++);\r
-\r
-                       }\r
-               }\r
-       }\r
-\r
-       // B/W picture\r
-       if (opjimage->numcomps == 1) {\r
-               int row, col;\r
-               int *y = opjimage->comps[0].data;\r
-               for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                       for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                               \r
-                               *(ptr++) = *(y);\r
-                               *(ptr++) = *(y);\r
-                               *(ptr++) = *(y++);\r
-\r
-                       }\r
-               }\r
-       }\r
-\r
-    wxMutexGuiEnter();\r
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
     wxLogMessage(wxT("JP2: image loaded."));\r
-    wxMutexGuiLeave();\r
+#ifndef __WXGTK__ \r
+               wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 \r
        /* close openjpeg structs */\r
        opj_destroy_decompress(dinfo);\r
@@ -263,7 +237,14 @@ bool wxJP2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
 // save the jp2 file format\r
 bool wxJP2Handler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbose )\r
 {\r
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
     wxLogError(wxT("JP2: Couldn't save image -> not implemented."));\r
+#ifndef __WXGTK__ \r
+               wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
+\r
     return false;\r
 }\r
 \r
diff --git a/OPJViewer/source/imagjpeg2000.cpp b/OPJViewer/source/imagjpeg2000.cpp
new file mode 100644 (file)
index 0000000..967bbad
--- /dev/null
@@ -0,0 +1,186 @@
+/*\r
+ * Copyright (c) 2007, Digital Signal Processing Laboratory, Universit� degli studi di Perugia (UPG), Italy\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+/////////////////////////////////////////////////////////////////////////////\r
+// Name:        imagjpeg2000.cpp\r
+// Purpose:     wxImage JPEG 2000 imagage rendering common functions\r
+// Author:      Giuseppe Baruffa\r
+// RCS-ID:      $Id: imagjpeg2000.cpp,v 0.00 2007/04/27 22:11:00 MW Exp $\r
+// Copyright:   (c) Giuseppe Baruffa\r
+// Licence:     wxWindows licence\r
+/////////////////////////////////////////////////////////////////////////////\r
+\r
+/*\r
+\r
+- At this point, we have the structure "opjimage" that is filled with decompressed\r
+  data, as processed by the OpenJPEG decompression engine\r
+\r
+- We need to fill the class "image" with the proper pixel sample values\r
+\r
+*/\r
+{\r
+       int shiftbpp;\r
+       int c, tempcomps;\r
+\r
+       // check components number\r
+       if (m_components > opjimage->numcomps)\r
+               m_components = opjimage->numcomps;\r
+\r
+       // check image depth (only on the first one, for now)\r
+       if (m_components)\r
+               shiftbpp = opjimage->comps[m_components - 1].prec - 8;\r
+       else\r
+               shiftbpp = opjimage->comps[0].prec - 8;\r
+\r
+       // prepare image size\r
+       if (m_components)\r
+               image->Create(opjimage->comps[m_components - 1].w, opjimage->comps[m_components - 1].h, true);\r
+       else\r
+               image->Create(opjimage->comps[0].w, opjimage->comps[0].h, true);\r
+\r
+       // access image raw data\r
+    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
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
+               wxLogMessage(wxT("JPEG2000: weird number of components"));\r
+#ifndef __WXGTK__ \r
+               wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
+               tempcomps = 1;\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
+       // only one component selected\r
+       if (m_components)\r
+               tempcomps = 1;\r
+\r
+       // RGB color picture\r
+       if (tempcomps == 3) {\r
+               int row, col;\r
+               int *r = opjimage->comps[0].data;\r
+               int *g = opjimage->comps[1].data;\r
+               int *b = opjimage->comps[2].data;\r
+               if (shiftbpp > 0) {\r
+                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
+                                       \r
+                                       *(ptr++) = (*(r++)) >> shiftbpp;\r
+                                       *(ptr++) = (*(g++)) >> shiftbpp;\r
+                                       *(ptr++) = (*(b++)) >> shiftbpp;\r
+\r
+                               }\r
+                       }\r
+\r
+               } else if (shiftbpp < 0) {\r
+                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
+                                       \r
+                                       *(ptr++) = (*(r++)) << -shiftbpp;\r
+                                       *(ptr++) = (*(g++)) << -shiftbpp;\r
+                                       *(ptr++) = (*(b++)) << -shiftbpp;\r
+\r
+                               }\r
+                       }\r
+                       \r
+               } else {\r
+                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
+\r
+                                       *(ptr++) = *(r++);\r
+                                       *(ptr++) = *(g++);\r
+                                       *(ptr++) = *(b++);\r
+                               \r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       // B/W picture\r
+       if (tempcomps == 1) {\r
+               int row, col;\r
+               int selcomp;\r
+\r
+               if (m_components)\r
+                       selcomp = m_components - 1;\r
+               else\r
+                       selcomp = 0;\r
+\r
+               int *y = opjimage->comps[selcomp].data;\r
+               if (shiftbpp > 0) {\r
+                       for (row = 0; row < opjimage->comps[selcomp].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[selcomp].w; col++) {\r
+                                       \r
+                                       *(ptr++) = (*(y)) >> shiftbpp;\r
+                                       *(ptr++) = (*(y)) >> shiftbpp;\r
+                                       *(ptr++) = (*(y++)) >> shiftbpp;\r
+\r
+                               }\r
+                       }\r
+               } else if (shiftbpp < 0) {\r
+                       for (row = 0; row < opjimage->comps[selcomp].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[selcomp].w; col++) {\r
+                                       \r
+                                       *(ptr++) = (*(y)) << -shiftbpp;\r
+                                       *(ptr++) = (*(y)) << -shiftbpp;\r
+                                       *(ptr++) = (*(y++)) << -shiftbpp;\r
+\r
+                               }\r
+                       }\r
+               } else {\r
+                       for (row = 0; row < opjimage->comps[selcomp].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[selcomp].w; col++) {\r
+                                       \r
+                                       *(ptr++) = *(y);\r
+                                       *(ptr++) = *(y);\r
+                                       *(ptr++) = *(y++);\r
+\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+\r
+}
\ No newline at end of file
index ad637aabac89613395eae1f38ba16fc745979b73..e0fa2d4e384735dc2b0ad822d498db447cf12234 100644 (file)
@@ -89,27 +89,41 @@ void mj2_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
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\r
+\r
 /* sample warning callback expecting a FILE* client object */\r
 void mj2_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
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\r
+\r
 /* sample debug callback expecting no client object */\r
 void mj2_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
+#ifndef __WXGTK__ \r
+               wxMutexGuiEnter();\r
+#endif /* __WXGTK__ */\r
        wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);\r
+#ifndef __WXGTK__ \r
     wxMutexGuiLeave();\r
+#endif /* __WXGTK__ */\r
 }\r
 \r
 /* macro functions */\r
@@ -691,63 +705,8 @@ bool wxMJ2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        /* close the byte stream */\r
        opj_cio_close(cio);\r
 \r
-       // check image size\r
-       if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) {\r
-               wxMutexGuiEnter();\r
-               wxLogError(wxT("MJ2: weird number of components"));\r
-               wxMutexGuiLeave();\r
-               opj_destroy_decompress(dinfo);\r
-               free(src);\r
-               return false;\r
-       }\r
-\r
-       // prepare image size\r
-    image->Create(opjimage->comps[0].w, opjimage->comps[0].h, true );\r
-\r
-       // access image raw data\r
-    image->SetMask( false );\r
-    ptr = image->GetData();\r
-\r
-       // RGB color picture\r
-       // does not handle comps. subsampling,\r
-       // so simply render the first component\r
-       if (opjimage->numcomps == 3) {\r
-               int row, col;\r
-               int *r = opjimage->comps[0].data;\r
-               /*\r
-               int *g = opjimage->comps[1].data;\r
-               int *b = opjimage->comps[2].data;\r
-               */\r
-               for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                       for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                               \r
-                               /*\r
-                               *(ptr++) = *(r++);\r
-                               *(ptr++) = *(g++);\r
-                               *(ptr++) = *(b++);\r
-                               */\r
-                               *(ptr++) = *(r);\r
-                               *(ptr++) = *(r);\r
-                               *(ptr++) = *(r++);\r
-\r
-                       }\r
-               }\r
-       }\r
-\r
-       // B/W picture\r
-       if (opjimage->numcomps == 1) {\r
-               int row, col;\r
-               int *y = opjimage->comps[0].data;\r
-               for (row = 0; row < opjimage->comps[0].h; row++) {\r
-                       for (col = 0; col < opjimage->comps[0].w; col++) {\r
-                               \r
-                               *(ptr++) = *(y);\r
-                               *(ptr++) = *(y);\r
-                               *(ptr++) = *(y++);\r
-\r
-                       }\r
-               }\r
-       }\r
+       /* common rendering method */\r
+#include "imagjpeg2000.cpp"\r
 \r
     wxMutexGuiEnter();\r
     wxLogMessage(wxT("MJ2: image loaded."));\r