2017-03-16 94 views
-2

我正在使用vs2015,創建了一個win32 C++控制檯應用程序 這給了一個純粹的本機C++應用程序,而我有一些其他的例子工作。 此演示代碼不起作用,問題接連加載的lenna.png或lenna.jpgcimg不會加載lenna圖像

每次我得到的錯誤,圖像文件isnt識別。 (我甚至用維基百科的原始lenna),但它不起作用,原因不明,爲了排除路徑問題,我甚至將lenna放在了「d:\\ lenna.jpg」。

我不知道爲什麼它不會工作,有什麼想法?

是cimg只是老,並沒有承認這些天的JPG?

#include "CImg.h" 
#include "stdafx.h" 
using namespace cimg_library; 

int main() { 
CImg<unsigned char> image("D:\\CODE\\Cimg-prj\\PGT\\Debug\\Lenna.png"), visu(500,400,1,3,0); 
const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 }; 
image.blur(2.5); 
CImgDisplay main_disp(image,"Click a point"), draw_disp(visu,"Intensity profile"); 
while (!main_disp.is_closed() && !draw_disp.is_closed()) { 
    main_disp.wait(); 
    if (main_disp.button() && main_disp.mouse_y()>=0) { 
    const int y = main_disp.mouse_y(); 
    visu.fill(0).draw_graph(image.get_crop(0,y,0,0,image.width()-1,y,0,0),red,1,1,0,255,0); 
    visu.draw_graph(image.get_crop(0,y,0,1,image.width()-1,y,0,1),green,1,1,0,255,0); 
    visu.draw_graph(image.get_crop(0,y,0,2,image.width()-1,y,0,2),blue,1,1,0,255,0).display(draw_disp); 
    } 
} 
return 0; 
} 

的錯誤,我得到(所有輸出):

無效參數 - 「C:\用戶\彼得\應用程序數據\本地的\ Temp \ kY6GW46A.pnm」 'gm.exe' 無法識別作爲內部或外部命令,可操作的程序或批處理文件。 無效參數 - 「C:\ Users \ Peter \ AppData \ Local \ Temp \ as88yC80.pnm」 'gm.exe'不被識別爲內部或外部命令, 可操作程序或批處理文件。 無效參數 - 「C:\ Users \ Peter \ AppData \ Local \ Temp \ wa804U6G.pnm」 'gm.exe'未被識別爲內部或外部命令, 可操作程序或批處理文件。 [CImg] * * * CImgIOException * * * [實例(0,0,0,0,00000000,非共享)] CImg :: load():無法識別文件格式'Lenna.png' 。

我相信Lenna.png是一個有效的PNG文件 (如果我重命名它的擴展名,irfranview會嘗試將它重命名爲png)。

我可能不會得到它應有的努力,建立一個正確的項目爲巴新的額外的複雜性,我下載的zlib和libpng,但不知道如何將它們添加到項目中(和他們的一堆文件?他們沒有一個dll或.h文件喜歡cimg我需要添加所有這些文件嗎?)

+0

*請*縮進您的代碼。 –

+0

我擔心長行會變得不可讀,而且由於代碼很短,每行大多有1條命令,我就這樣寫下來。 – user3800527

+0

相信我,閱讀它會更容易。如果必須分割長線。 –

回答

0

如果您希望CImg能夠加載PNG文件而不依賴於ImageMagick,您必須通過定義一個宏之前加載CImg頭文件;

#define cimg_use_png 1 
#include "CImg.h" 

您還必須鏈接庫GDI32和libpng和libz以壓縮PNG。

+0

又如一個例子(鸚鵡的例子)我沒有鏈接GDI32 是閱讀png/jpg的必要條件嗎? (順便說一句,仍然必須測試你的答案,將確認它是否今天晚些時候工作) – user3800527

+0

到目前爲止我無法使它的工作,我剛剛開始與cimg。 它不清楚明顯zlib和libpng不只是一些DLL我可以添加。 你知道可能的代碼示例來完成這件事。 我正在嘗試爲攪拌機渲染的圖像創建一個新的過濾器。 我制定了圖像數學,但cimg現在讓我頭疼 – user3800527

+0

對不起,我不使用Visual Studio或Windows - 在Linux和Mac上一切正常,並且CImg肯定不會過時。我會環顧四周,看看我能找到除GDI32以外的任何特定於Windows的東西。 –