2013-02-22 52 views
2

有人可以推薦我一個簡單,易於使用 PNG庫爲c + +或.NET?它需要做的只是:加載大的PNG圖像(比如說20000x20000),並告訴我每個像素有什麼顏色。易於使用的PNG庫?

.NET中的位圖類無法加載大圖像,會引發OutOfMemory異常。

我花了合理的時間在谷歌翻閱C++庫,但他們都做得比我需要的多得多,他們的使用對我來說太複雜了。

+1

也就是說** **非常大 - 大約400MB(所以即使壓縮後> 40MB )。你從哪裏得到這樣的文件? – 2013-02-22 13:01:52

+0

更像是1.2GB,如果它是24位顏色。如果是每像素32位,則爲1.6GB。所以可能只是因爲你實際上已經沒有了記憶。 – 2013-02-22 13:18:02

回答

5

PNG文件的事實標準庫是LibPNG。這不是世界上設計最好的API,但如果你只是通過其中一個教程中的步驟來完成,就很難搞定。

您可能會發現,將自己的API封裝到自己的一些簡單函數(或類)中可能會更容易。一旦你完成了,你應該很好走。

+0

這將是我的選擇。對於簡單的問題,這是一個不錯的選擇。 – 2013-02-22 13:07:49

1

對於C++:

根據你就可以使用你可以看看許可證:

魔王:http://openil.sourceforge.net/(有點過時但還是不錯的選擇)(Linux操作系統,贏)

的ImageMagick:http://www.imagemagick.org/script/index.php(保持良好,所有平臺)

既支持多種輸入和輸出格式。

+0

另外值得一提的是GraphicsMagick(http://www.graphicsmagick.org/),它是ImageMagick的一個分支。 – Reunanen 2013-02-22 13:21:57

1

試試這個:

http://nothings.org/stb_image.c

你可以用它代替zlib的藏漢的。

+0

這比'libpng'更容易使用。例如,下面是如何加載png,並顯示寬度和高度以及通道'''int x,y,comp; unsigned char * data = stbi_load(argv [1],&x,&y,&comp,1); (stdout,「width:%d,height:%d,comp:%d \ n」,x,y,comp); stbi_image_free(data); ''' – Robert 2015-06-17 04:50:22

1

如果C#是一個選項,請嘗試PNGCS。它是由本人完成的(最初是由Java自己完成的),它允許您逐行讀寫,無需在內存中存儲所有數據。

我已經測試,它可以讀取和寫入大文件(30000 X 30000個像素,超過2GB的硬盤),at least in Java