2016-11-23 69 views
0

我一直堅持一個星期試圖在Unity中解碼一個16位1通道PNG。圖像以字節數組的形式存在,需要解碼才能訪問各個像素值。圖像是深度圖像,其中每個像素包含深度度量。解碼c#中的16位一個通道PNG(Unity)

我不能使用Unity的Texture2d.loadImage(),因爲它出於某種原因會自動將格式更改爲RGBA24。我也看了opencv插件,但它不是免費的,因此不是一個選項。我無法使用.NET框架中的System.Windows.Media.Imaging.PngBitmapDecoder,因爲我的平臺是Ubuntu

我沒有.NET IDE,我通過Unity使用MonoDevelop。

希望你們能幫忙! :)

+0

您可以嘗試使用https://github.com/leonbloy/pngcs – leonbloy

回答

0

的問題是,PNG圖像有12個字節垃圾,我必須刪除之前,他們可以被刪除。 Texture2d.loadImage()在完成後工作。有問題的圖像來自ROS,通過Unity中的ROSBridgeLib作爲CompressedImage消息。感謝您的幫助:)

1

您可以使用ImageMagick或GraphicsMagick將圖像從PNG轉換爲PGM並從那裏開始。 PGM是容易的工作,只包含一個簡單的報頭「P2寬度高度MAXVAL」,接着在像素左上至右下的順序:

# Make a 4x4 test image with 16-bit grayscale pixels 
im7q16magick gradient:[4x4] -depth 16 g16.png 

# Convert it to PGM format 
im7q16magick g16.png -compress none g16.pgm 

# Print it out 
cat g16.pgm 

P2 
4 4 
65535 
65535 65535 65535 65535 
49151 49151 49151 49151 
32768 32768 32768 32768 
16384 16384 16384 16384