Skip to content

Commit be6c0b2

Browse files
committed
Better HdrImageTests
1 parent 3433608 commit be6c0b2

2 files changed

Lines changed: 60 additions & 4 deletions

File tree

BCnEncTests.Framework/HdrImageTests.cs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
using System;
12
using System.IO;
3+
using System.Threading.Tasks;
4+
using BCnEncoder.Decoder;
5+
using BCnEncoder.Encoder;
26
using BCnEncoder.Shared;
37
using BCnEncTests.Support;
48
using CommunityToolkit.HighPerformance;
@@ -17,10 +21,39 @@ public void LoadHdr()
1721
Assert.True(hdrImg.height > 0);
1822
Assert.True(hdrImg.pixels.Length == hdrImg.width * hdrImg.height);
1923

20-
// Save as HDR to verify round-trip
21-
var hdrOut = new HdrImage(new Span2D<ColorRgbFloat>(hdrImg.pixels, hdrImg.height, hdrImg.width));
22-
using var outStream = File.OpenWrite("test_hdr_load.hdr");
23-
hdrOut.Write(outStream);
24+
var rgba = new ColorRgba32[hdrImg.pixels.Length];
25+
for (var i = 0; i < hdrImg.pixels.Length; i++)
26+
{
27+
var p = hdrImg.pixels[i];
28+
rgba[i] = new ColorRgba32(
29+
(byte)(Math.Max(0, Math.Min(1, p.r)) * 255 + 0.5f),
30+
(byte)(Math.Max(0, Math.Min(1, p.g)) * 255 + 0.5f),
31+
(byte)(Math.Max(0, Math.Min(1, p.b)) * 255 + 0.5f),
32+
255);
33+
}
34+
var converted = new Memory2D<ColorRgba32>(rgba, hdrImg.height, hdrImg.width);
35+
var reference = ImageLoader.LoadTestImage("../../../../BCnEncTests/testImages/test_hdr_kiara.png");
36+
TestHelper.AssertImagesEqual(reference, converted, CompressionQuality.BestQuality);
37+
}
38+
39+
[Fact]
40+
public async Task DecodeAllMipMapsHdrStreamAsync()
41+
{
42+
var encoder = new BcEncoder();
43+
encoder.OutputOptions.Format = CompressionFormat.Bc6U;
44+
encoder.OutputOptions.Quality = CompressionQuality.Fast;
45+
encoder.OutputOptions.GenerateMipMaps = true;
46+
47+
var decoder = new BcDecoder();
48+
var input = HdrLoader.TestHdrKiara;
49+
var ktxWithMips = encoder.EncodeToKtxHdr(new Memory2D<ColorRgbFloat>(input.pixels, input.height, input.width));
50+
using var ms = new MemoryStream();
51+
ktxWithMips.Write(ms);
52+
ms.Position = 0;
53+
54+
var images = await decoder.DecodeAllMipMapsHdr2DAsync(ms);
55+
Assert.Equal((int)ktxWithMips.header.NumberOfMipmapLevels, images.Length);
56+
Assert.True(images.Length > 1);
2457
}
2558
}
2659
}

BCnEncTests/HdrImageTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Text;
5+
using System.Threading.Tasks;
6+
using BCnEncoder.Decoder;
57
using BCnEncoder.Encoder;
68
using BCnEncoder.Shared;
79
using BCnEncTests.Support;
10+
using CommunityToolkit.HighPerformance;
811
using SixLabors.ImageSharp;
912
using SixLabors.ImageSharp.PixelFormats;
1013
using Xunit;
@@ -39,5 +42,25 @@ public void LoadHdr()
3942

4043
TestHelper.AssertImagesEqual(HdrLoader.ReferenceKiara, img2, CompressionQuality.BestQuality);
4144
}
45+
46+
[Fact]
47+
public async Task DecodeAllMipMapsHdrStreamAsync()
48+
{
49+
var encoder = new BcEncoder();
50+
encoder.OutputOptions.Format = CompressionFormat.Bc6U;
51+
encoder.OutputOptions.Quality = CompressionQuality.Fast;
52+
encoder.OutputOptions.GenerateMipMaps = true;
53+
54+
var decoder = new BcDecoder();
55+
var input = HdrLoader.TestHdrKiara;
56+
var ktxWithMips = encoder.EncodeToKtxHdr(new Memory2D<ColorRgbFloat>(input.pixels, input.height, input.width));
57+
using var ms = new MemoryStream();
58+
ktxWithMips.Write(ms);
59+
ms.Position = 0;
60+
61+
var images = await decoder.DecodeAllMipMapsHdr2DAsync(ms);
62+
Assert.Equal((int)ktxWithMips.header.NumberOfMipmapLevels, images.Length);
63+
Assert.True(images.Length > 1);
64+
}
4265
}
4366
}

0 commit comments

Comments
 (0)