目前,SkiaSharp不支持tiff图像 . (它支持jpg,gif,bmp,png和其他一些 . )
如何将tiff图像转换为SKBitmap对象?
一个想法:也许's an efficient way to convert a tiff stream > png stream > SKBitmap object? I'我不确定 System.Drawing
能否有效地处理tiff> png流 . 另一种可能的选择是LibTiff.Net,但需要一个如何将tiff流转换为png流的示例 .
另一个想法:访问tiff像素并将其直接绘制到SKCanvas上?
其他想法?
2 回答
@DougS
您的实现大多是正确的,但由于多个内存分配和副本,它的性能不是很高 .
我注意到你创建了3个内存块,每个块的总大小为(w * h * 4字节):
您还要多次复制内存之间的像素:
我想我设法创建了一个解码流的类似方法,只有一个副本和内存分配:
一个要点住在这里:https://gist.github.com/mattleibow/0a09babdf0dc9d2bc3deedf85f9b57d6
让我解释一下代码......我基本上是在创建
int[]
,但是然后将其传递给SKBitmap
并让它接管 . 我正在固定它,因为SKBitmap
位于非托管内存中,GC可能会移动它,但我确定在处理位图时取消固定它 .这是一个更详细的步骤:
对于调试会话中的一些原始统计数据,我的一个图像的代码大约需要500毫秒,但我的代码只需要20毫秒 .
我希望我对你的代码听起来不太苛刻/消极,我不是以任何方式表达的 .
我不是专家,所以我欢迎任何能够使这些代码更有效率的专家(或者有完全不同的想法来获取SKBitmap) .
这使用LibTiff.Net