66 lines
1.8 KiB
C#
66 lines
1.8 KiB
C#
using Minint.Core.Models;
|
|
using Minint.Core.Services.Impl;
|
|
|
|
namespace Minint.Tests;
|
|
|
|
public class ImageEffectsTests
|
|
{
|
|
private readonly ImageEffectsService _effects = new();
|
|
|
|
[Fact]
|
|
public void ApplyGrayscale_ConvertsColors()
|
|
{
|
|
var doc = new MinintDocument("test");
|
|
var red = new RgbaColor(255, 0, 0, 255);
|
|
doc.EnsureColorCached(red);
|
|
|
|
_effects.ApplyGrayscale(doc);
|
|
|
|
var gray = doc.Palette[1];
|
|
Assert.Equal(gray.R, gray.G);
|
|
Assert.Equal(gray.G, gray.B);
|
|
Assert.Equal(255, gray.A);
|
|
// BT.601: 0.299*255 ≈ 76
|
|
Assert.InRange(gray.R, 74, 78);
|
|
}
|
|
|
|
[Fact]
|
|
public void ApplyGrayscale_PreservesTransparentIndex()
|
|
{
|
|
var doc = new MinintDocument("test");
|
|
doc.EnsureColorCached(new RgbaColor(100, 200, 50, 255));
|
|
|
|
_effects.ApplyGrayscale(doc);
|
|
|
|
Assert.Equal(RgbaColor.Transparent, doc.Palette[0]);
|
|
}
|
|
|
|
[Fact]
|
|
public void ApplyContrast_IncreasesContrast()
|
|
{
|
|
var doc = new MinintDocument("test");
|
|
var midGray = new RgbaColor(128, 128, 128, 255);
|
|
var lightGray = new RgbaColor(192, 192, 192, 255);
|
|
doc.EnsureColorCached(midGray);
|
|
doc.EnsureColorCached(lightGray);
|
|
|
|
_effects.ApplyContrast(doc, 2.0);
|
|
|
|
// midGray (128) stays ~128: factor*(128-128)+128 = 128
|
|
Assert.InRange(doc.Palette[1].R, 126, 130);
|
|
// lightGray (192): factor*(192-128)+128 = 2*64+128 = 256 → clamped to 255
|
|
Assert.Equal(255, doc.Palette[2].R);
|
|
}
|
|
|
|
[Fact]
|
|
public void ApplyContrast_PreservesAlpha()
|
|
{
|
|
var doc = new MinintDocument("test");
|
|
doc.EnsureColorCached(new RgbaColor(100, 100, 100, 200));
|
|
|
|
_effects.ApplyContrast(doc, 1.5);
|
|
|
|
Assert.Equal(200, doc.Palette[1].A);
|
|
}
|
|
}
|