Add the stbimage test.

This commit is contained in:
H. Utku Maden 2023-07-15 16:23:22 +03:00
parent f0132e3459
commit 99277153d2
8 changed files with 26 additions and 25 deletions

@ -3,10 +3,12 @@ using System;
using System.IO;
using System.Runtime.InteropServices;
using Quik.Stb;
using Image = Quik.Stb.StbImage;
namespace Quik.StbImage.Tests
{
[TestClass]
[TestCategory("Load Image")]
public class LoadImage
{
[TestMethod("Set Global Options")]
@ -16,40 +18,32 @@ namespace Quik.StbImage.Tests
Quik.Stb.StbImage.UnpremultiplyOnLoad = true;
}
private StbiStreamWrapper PrepareImage(string path, out stbi_io_callbacks cb)
private Stream GetImage(string path)
{
Stream? str = GetType().Assembly.GetManifestResourceStream(path);
Assert.IsNotNull(str, $"Could not find test image resource {path}.");
StbiStreamWrapper wrapper = new StbiStreamWrapper(str);
wrapper.CreateCallbacks(out cb);
return wrapper;
return str;
}
[TestMethod("Load a PNG")]
public unsafe void LoadPng()
private unsafe void TestImage(string path, int width, int height)
{
// TODO: Fill these up!
const int TEST_CHANNELS = 0;
const int TEST_WIDTH = 0;
const int TEST_HEIGHT = 0;
Image image = Image.Load(GetImage(path));
int x, y, numChannels;
using StbiStreamWrapper str = PrepareImage("Quik.StbImage.Tests.res.test.png", out stbi_io_callbacks cb);
byte *image = Stbi.load_from_callbacks(&cb, null, &x, &y, &numChannels, (int)StbiEnum.STBI_default);
Assert.IsNotNull(image);
if (image == null)
{
IntPtr reasonPtr = (IntPtr)Stbi.failure_reason();
string? reason = Marshal.PtrToStringUTF8((IntPtr)reasonPtr);
Assert.Fail("Could not load image: {0}.", reason ?? "None specified. (stbi_failure_reason() is null)");
}
Assert.AreEqual(width, image.Width, "Width does not match.");
Assert.AreEqual(height, image.Height, "Height does not match.");
Assert.AreEqual(TEST_CHANNELS, numChannels, "Channel count does not match.");
Assert.AreEqual(TEST_WIDTH, x, "Width does not match.");
Assert.AreEqual(TEST_HEIGHT, y, "Height does not match.");
Stbi.image_free(image);
image.Dispose();
}
const int WIDTH = 768;
const int HEIGHT = 512;
[TestMethod("Load a single frame GIF")]
public unsafe void LoadGif() => TestImage("Quik.StbImage.Tests.res.kodim.kodim23.gif", WIDTH, HEIGHT);
[TestMethod("Load a JPEG")]
public unsafe void LoadJpg() => TestImage("Quik.StbImage.Tests.res.kodim.kodim23.jpg", WIDTH, HEIGHT);
[TestMethod("Load a PNG")] public unsafe void LoadPng() => TestImage("Quik.StbImage.Tests.res.kodim.kodim23.png", WIDTH, HEIGHT);
}
}

@ -10,6 +10,10 @@
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="res/**"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.10" />

@ -0,0 +1,3 @@
Kodak Image Suite Test Images owned by Kodak. Image 23 was taken by Steve Kelly.
The original image file kodim23.png and its derivatives are only included for
test purposes only and should not be redistributed with the software.

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB