<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta0007" />
</ItemGroup>
</Project>
using System;
using System.Threading.Tasks;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.Primitives;
namespace ParallelImage
{
class Program
{
static void Main(string[] args)
{
const int width = 12;
const int rowHight = 16;
const int rows = 10;
const string fileName = "out.jpg";
using (Image<Rgb24> startImage = new Image<Rgb24>(Configuration.Default, width, rowHight * rows, Color.White))
{
using(Image<Rgb24> clonedImage = startImage.Clone(clone => {
Parallel.For(
fromInclusive: 0,
toExclusive: rows,
new ParallelOptions { MaxDegreeOfParallelism = args?.Length == 1 ? int.Parse(args[0]) : -1 },
(row) =>
{
clone.Fill(Color.Black, new RectangleF(0, row * rowHight, width, rowHight));
});
}))
{
clonedImage.Save(fileName);
Rgb24 black = Color.Black.ToPixel<Rgb24>();
int count = 0;
foreach(Rgb24 pixel in clonedImage.GetPixelSpan())
{
count++;
if (pixel.R != black.R)
{
Console.WriteLine(count.ToString());
return;
}
}
Console.WriteLine("No problems found");
}
}
}
}
}
This will create an image with a white background, and then draw black rectangles down the full height of the image. The image will be saved under 'out.jpg'. Then all the pixels are checked and reports the position of the first non-black one it finds.
~/Test/ParallelImage > dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 3.1.101
Commit: b377529961
Runtime Environment:
OS Name: Mac OS X
OS Version: 10.15
OS Platform: Darwin
RID: osx.10.15-x64
Base Path: /usr/local/share/dotnet/sdk/3.1.101/
Host (useful for support):
Version: 3.1.1
Commit: a1388f194c
.NET Core SDKs installed:
3.0.100 [/usr/local/share/dotnet/sdk]
3.0.101 [/usr/local/share/dotnet/sdk]
3.1.100 [/usr/local/share/dotnet/sdk]
3.1.101 [/usr/local/share/dotnet/sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.App 3.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.13 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.14 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.15 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download