2010-11-03 104 views
3

所以我遇到了一個問題,在Windows上使用libjpeg會導致jpeg_read_header()崩潰。jpeg_read_header的替代方案libjpeg

的問題是(很歡快的)描述如下:http://sourceforge.net/projects/gnuwin32/forums/forum/74807/topic/1629371?message=4053776

我已經決定在第三選項,該選項不使用jpeg_stdio_src /目標的API。然而,經過大量的搜索,我似乎無法找到在帖子末尾提到的'將數據提供到libjpeg中的其他方式',任何人都可以將我指向正確的位置?

+0

使用MS VC++ Express版本重新編譯庫需要不到一分鐘的時間。這是不能接受的。 – 2010-11-03 22:41:12

+0

它可能是...但是,我重新編譯它,並給我鏈接器錯誤的MSVCRT.lib(MSVCR100.dll)的調諧:錯誤LNK2005:_sprintf已在LIBCMT.lib(sprintf.obj)中定義。理想情況下,我只想使用jpeg_mem_src而不是jpeg_stdio_src,它應該是更加跨平臺的。我寧願不必記住(或者將來有人不得不弄清楚)關於我的jpeg庫需要編譯的C庫的規定= /。 – Tom 2010-11-04 17:39:03

+0

當我試圖編譯我的項目時,鏈接器錯誤來了,順便說一句。附註:我使用scons和cl.exe作爲編譯器。 – Tom 2010-11-04 17:40:33

回答

1

如果我正確地理解了這個問題,那是因爲windows中所有不同文件句柄之間的區別。它們並不完全相容。

此鏈接是否有幫助?它會告訴你如何在它們之間進行轉換。然後,您可以爲函數提供正確類型的文件句柄並使其運行。

http://www.codeproject.com/KB/files/handles.aspx

另外,不要使用JPEG庫,並使用另一個。沒有我可以特別推薦的,因爲我以前沒有必要使用jpeg庫。

+0

知道的好材料! – Tom 2010-11-04 17:41:09

2

Sompe人report a workaround針對在較新的Visual Studio中與msvcrt鏈接的問題。通過使用Google MSVCRT.DLL 「視覺工作室」

1

其中的 「其他的方法來進給數據」 發現的是這些功能:

  1. jpeg_CreateDecompress
  2. jpeg_read_header
  3. jpeg_start_decompress
  4. jpeg_read_raw_data/jpeg_read_scanlines
  5. jpeg_destroy_decompress
0

我最近用libjppeg-turbo遇到了同樣的問題。我不想重新編譯庫或將mscvr.dll鏈接到我的vs2015應用程序。

這個函數對我有效:jpeg_mem_src(...)而不是使用jpeg_stdio_src。由於它不會將任何C運行時結構傳遞給庫,所以它工作得很好。功能定義可以在這裏找到link

它從內存緩衝區而不是文件獲取輸入數據,如果文件不是太大/內存不是太多的問題,它的工作原理。