首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展SKImage的最快方法(SkiaSharp)

扩展SKImage的最快方法(SkiaSharp)
EN

Stack Overflow用户
提问于 2018-01-24 20:38:50
回答 1查看 3K关注 0票数 3

我正在寻找调整SKImage大小的最快方法。不幸的是,我发现了一些例子。

我之所以这样问,是因为如果我并行执行这些函数(在我的例子中大约有60个线程),每个伸缩函数的执行时间会增加多达20倍。

我尝试了以下方法,性能看起来非常相似,有没有更好的方法?

方法1:

代码语言:javascript
复制
SKImage src = (...);
SKImageInfo info = new SKImageInfo(width, height, SKColorType.Bgra8888);
SKImage output = SKImage.Create(info);
src.ScalePixels(output.PeekPixels(), SKFilterQuality.None);

方法二:

代码语言:javascript
复制
SKImage src = (...);
SKImage output;
float resizeFactorX = (float)width / (float)Src.Width;
float resizeFactorY = (float)height / (float)Src.Height;

using (SKSurface surface = SKSurface.Create((int)(Src.Width * 
       resizeFactorX), (int)(Src.Height * resizeFactorY),
       SKColorType.Bgra8888, SKAlphaType.Opaque))
{
  surface.Canvas.SetMatrix(SKMatrix.MakeScale(resizeFactorX, resizeFactorY));
  surface.Canvas.DrawImage(Src, 0, 0);
  surface.Canvas.Flush();
  output = surface.Snapshot();
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-15 15:23:24

这是我使用的代码。另一个想法是确保将SKImage对象包装在using中,以确保快速处理它们。我不确定这是否会导致每次迭代的速度变慢。

代码语言:javascript
复制
using (var surface = SKSurface.Create(resizedWidth, resizedHeight,
    SKImageInfo.PlatformColorType, SKAlphaType.Premul))
using (var paint = new SKPaint())
{
    // high quality with antialiasing
    paint.IsAntialias = true;
    paint.FilterQuality = SKFilterQuality.High;

    // draw the bitmap to fill the surface
    surface.Canvas.DrawImage(srcImg, new SKRectI(0, 0, resizedWidth, resizedHeight),
        paint);
    surface.Canvas.Flush();

    using (var newImg = surface.Snapshot())
    {
        // do something with newImg
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48422724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档