LibDithering 1.1.0

dotnet add package LibDithering --version 1.1.0                
NuGet\Install-Package LibDithering -Version 1.1.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LibDithering" Version="1.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add LibDithering --version 1.1.0                
#r "nuget: LibDithering, 1.1.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install LibDithering as a Cake Addin
#addin nuget:?package=LibDithering&version=1.1.0

// Install LibDithering as a Cake Tool
#tool nuget:?package=LibDithering&version=1.1.0                

CSharp-Dithering

CSharp (C#) versions of certain dithering algorithms. This project is .NET 8 compatible, managed and available as Nuget!

Examples

Use Atkinson dithering with web safe color reduction for 24 bit PNG input with System.Drawing (this example is Windows only)

public void DoAtkinsonDithering()
{
    AtkinsonDitheringRGB<byte> atkinson = new AtkinsonDitheringRGB<byte>(TrueColorBytesToWebSafeColorBytes);

    using(FileStream pngStream = new FileStream("half.png", FileMode.Open, FileAccess.Read))
    using(var image = new Bitmap(pngStream))
    {
        byte[,,] bytes = ReadBitmapToColorBytes(image);

        TempByteImageFormat temp = new TempByteImageFormat(bytes);
        atkinson.DoDithering(temp);

        WriteToBitmap(image, temp.GetPixelChannels);

        image.Save("test.png");
    }
}

private static void TrueColorBytesToWebSafeColorBytes(in byte[] input, ref byte[] output)
{
    for (int i = 0; i < input.Length; i++)
    {
        output[i] = (byte)(Math.Round(input[i] / 51.0) * 51);
    }
}

private static byte[,,] ReadBitmapToColorBytes(Bitmap bitmap)
{
    byte[,,] returnValue = new byte[bitmap.Width, bitmap.Height, 3];
    for (int x = 0; x < bitmap.Width; x++)
    {
        for (int y = 0; y < bitmap.Height; y++)
        {
            Color color = bitmap.GetPixel(x, y);
            returnValue[x, y, 0] = color.R;
            returnValue[x, y, 1] = color.G;
            returnValue[x, y, 2] = color.B;
        }
    }
    return returnValue;
}

private static void WriteToBitmap(Bitmap bitmap, Func<int, int, byte[]> reader)
{
    for (int x = 0; x < bitmap.Width; x++)
    {
        for (int y = 0; y < bitmap.Height; y++)
        {
            byte[] read = reader(x, y);
            Color color = Color.FromArgb(read[0], read[1], read[2]);
            bitmap.SetPixel(x, y, color);
        }
    }
}
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.0 50 2/10/2025
1.0.1 761 11/18/2023
1.0.0 1,712 5/29/2022
0.9.3 1,008 9/17/2020
0.9.2 442 9/10/2020
0.9.1 453 9/3/2020
0.9.0 464 7/30/2020