SKBitmap 性能设置获取像素

问题描述 投票:0回答:1

我从 System.Drawing 迁移到 SkiSharp,并有方法用 8 位填充位图 我的图片处理时间需要 50 秒,使用 System.Drawing 时速度要快得多 如何加快方法的运行时间?

private void FillBitmap8Bit(SKBitmap bmp, int row, RGBValues[] input)
        {
             
            bool setRed = (_params.Format == FrameFormat.Gray || _params.Format == FrameFormat.RGB || _params.Format == FrameFormat.Red);
            bool setGreen = (_params.Format == FrameFormat.Gray || _params.Format == FrameFormat.RGB || _params.Format == FrameFormat.Green);
            bool setBlue = (_params.Format == FrameFormat.Gray || _params.Format == FrameFormat.RGB || _params.Format == FrameFormat.Blue);
            //bool setAlpha = (bmp.AlphaType & SKAlphaType.Premul) != 0;
            //The pixel data contains alpha values that are not premultiplied.

            for (int i = 0; i < _params.PixelsPerLine; i++)
            {
                var pixelColor = bmp.GetPixel(i, row);

                if (setRed)
                    pixelColor = pixelColor.WithRed((byte)(input[i].R >> 8));
                if (setGreen)
                    pixelColor = pixelColor.WithGreen((byte)(input[i].G >> 8));
                if (setBlue)
                    pixelColor = pixelColor.WithBlue((byte)(input[i].B >> 8));

                // Set the new pixel color
                bmp.SetPixel(i, row, pixelColor);
            }
        }

加快方法的运行时间

c# skiasharp
1个回答
0
投票

要使用特定颜色填充位图,有一个

SKBitmap.Erase
方法:

擦除(SK颜色)

用指定的颜色填充整个位图。

public void Erase (SkiaSharp.SKColor color);

© www.soinside.com 2019 - 2024. All rights reserved.