为啥 SkiaSharp.SKBitmap.Resize 返回 null?

Posted

技术标签:

【中文标题】为啥 SkiaSharp.SKBitmap.Resize 返回 null?【英文标题】:Why does SkiaSharp.SKBitmap.Resize returns null?为什么 SkiaSharp.SKBitmap.Resize 返回 null? 【发布时间】:2017-12-09 06:24:47 【问题描述】:

documentation 说:

如果可以进行调整大小操作,则返回调整大小的位图 执行,否则为空。

显然没有帮助。完全没有。 它至少可以给我们一个枚举/错误代码/任何东西。

所以我下载了 lib 的源代码,发现SKBitmaps.resize 最终调用了SKPixmap.Resize,而后者又调用了SkiaApi.sk_bitmapscaler_resize...

这就是路的尽头,因为SkiaApi.sk_bitmapscaler_resize 被实现为(here) 为extern

所以我开始下载实际的Skia(因为 SkiaSharp 只是一个瘦包装器)来尝试找出为什么有时这种方法会失败。

但我就是不知道SkiaApi.sk_bitmapscaler_resize 映射到哪个函数/方法。

谁能告诉我它映射到哪个函数? 甚至更好,为什么有时这种方法会失败?

【问题讨论】:

【参考方案1】:

Google 代码有点模糊,这就是 SkiaSharp 文档受限的原因。

但是...查看代码,似乎源颜色类型和目标颜色类型都需要是 32 位平台颜色类型(Bgra8888 或 Rgba888)。

您还可以检查以确保像素地址 (GetPixels()) 正确(不是 null/IntPtr.Zero)。

最后,确保目标大小为>= 1

【讨论】:

以上是关于为啥 SkiaSharp.SKBitmap.Resize 返回 null?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?