Этап 9
This commit is contained in:
38
Minint.Core/Services/Impl/ImageEffectsService.cs
Normal file
38
Minint.Core/Services/Impl/ImageEffectsService.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using Minint.Core.Models;
|
||||
|
||||
namespace Minint.Core.Services.Impl;
|
||||
|
||||
public sealed class ImageEffectsService : IImageEffectsService
|
||||
{
|
||||
public void ApplyContrast(MinintDocument doc, double factor)
|
||||
{
|
||||
for (int i = 1; i < doc.Palette.Count; i++)
|
||||
{
|
||||
var c = doc.Palette[i];
|
||||
doc.Palette[i] = new RgbaColor(
|
||||
ContrastByte(c.R, factor),
|
||||
ContrastByte(c.G, factor),
|
||||
ContrastByte(c.B, factor),
|
||||
c.A);
|
||||
}
|
||||
doc.InvalidatePaletteCache();
|
||||
}
|
||||
|
||||
public void ApplyGrayscale(MinintDocument doc)
|
||||
{
|
||||
for (int i = 1; i < doc.Palette.Count; i++)
|
||||
{
|
||||
var c = doc.Palette[i];
|
||||
byte gray = (byte)Math.Clamp((int)(0.299 * c.R + 0.587 * c.G + 0.114 * c.B + 0.5), 0, 255);
|
||||
doc.Palette[i] = new RgbaColor(gray, gray, gray, c.A);
|
||||
}
|
||||
doc.InvalidatePaletteCache();
|
||||
}
|
||||
|
||||
private static byte ContrastByte(byte value, double factor)
|
||||
{
|
||||
double v = ((value / 255.0) - 0.5) * factor + 0.5;
|
||||
return (byte)Math.Clamp((int)(v * 255 + 0.5), 0, 255);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user