我正在尝试使用C#和SkiaSharp来实现图像处理。
下面的代码试图实现边缘检测。
下面代码的结果相当不错,需要改进,但这不是我的观点:
用于测试代码的图像 https://i.stack.imgur.com/EZgi4.jpg
canvas.Clear(SKColors.White);
// USerskbitmapNEW has been loaded earlier.
SKBitmap image = new SKBitmap(USerskbitmapNEW.Width, USerskbitmapNEW.Height);
for (int i = 0; i < image.Width; i++)
{
for (int j = 0; j < image.Height; j++)
{
SKColor c1 = USerskbitmapNEW.GetPixel(i, j - 1);
SKColor c2 = USerskbitmapNEW.GetPixel(i, j + 1);
int xval = 0;
int yval = 0;
xval = (int)(c1.Red * .3 + c2.Blue * 0.11 - (c2.Red * .3));
yval = (int)(c2.Red * .3 + c2.Green * .29 + c2.Blue * 0.11);
if (xval > yval )
{
SKColor c = SKColors.Black;
image.SetPixel(i, j, c);
}
}
}
canvas.DrawBitmap(image, myframe);
我的问题是方法: SKbitmap.GetPixel(i, j);和 SKbitmap.SetPixel(i, j, 颜色);当使用大于 200kb 的图像时,速度非常慢。
与上述方法(.GetPixel.SetPixel)相反,当您应用图像各种滤镜时,例如,var cf = SKColorFilter.CreateTable(null, null, colorTable, colorTable); ....
skiasharp 非常快。
我的问题:是否有其他方法使用skiasharp来读取和修改图像的像素,并且性能比我描述的方法更好?
提前致谢
米哈利斯