【问题标题】:Decoding a 16 bit one channel png in c# (Unity)在 c# (Unity) 中解码 16 位单通道 png
【发布时间】:2017-04-07 10:00:42
【问题描述】:
我被困了一个星期,试图在 Unity 中解码 16 位 1 通道 png。图像采用字节数组的形式,需要对其进行解码以访问各个像素值。该图像是一个深度图像,其中每个像素都包含一个深度测量值。
我不能使用 Unity 的 Texture2d.loadImage(),因为它会出于某种原因自动将格式更改为 RGBA24。我还查看了 opencv 插件,但它不是免费的,因此不是一个选项。我既不能使用 .NET 框架中的 System.Windows.Media.Imaging.PngBitmapDecoder,因为我的平台是 Ubuntu。
我没有 .NET ide,我通过 Unity 使用 MonoDevelop。
希望大家帮忙! :)
【问题讨论】:
标签:
c#
unity3d
compression
png
decode
【解决方案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
【解决方案2】:
问题是 png 图像有 12 个字节的垃圾,我必须先删除它们才能删除它们。完成后 Texture2d.loadImage() 工作。有问题的图像通过 Unity 中的 ROSBridgeLib 作为 CompressedImage 消息来自 ROS。谢谢你的帮助:)