Skip to content

Commit c77db3b

Browse files
authored
Upgrade libczicompressc to version 0.5.2 (#22)
* Upgrade libczicompressc to 0.5.2 * Adapt tests * Use LFS for CZIs
1 parent 40a2ba8 commit c77db3b

File tree

9 files changed

+73
-16
lines changed

9 files changed

+73
-16
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
*.png filter=lfs diff=lfs merge=lfs -text
33
*.nupkg filter=lfs diff=lfs merge=lfs -text
44
*.pdf filter=lfs diff=lfs merge=lfs -text
5+
*.czi filter=lfs diff=lfs merge=lfs -text

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,4 +431,7 @@ FodyWeavers.xsd
431431

432432
##################################
433433
### END VisualStudio.gitignore ###
434-
##################################
434+
##################################
435+
436+
# Be able to commit local nupkg
437+
!czishrink/packages_local/*.nupkg

czishrink/Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
<GenerateDocumentationFile>True</GenerateDocumentationFile>
1111
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
1212
<!-- Version -->
13-
<VersionPrefix>1.0.1<!--fix/version-stuff--></VersionPrefix>
13+
<VersionPrefix>1.0.2<!--feature/upgrade-libczicompressc-0_5_2--></VersionPrefix>
1414
</PropertyGroup>
15-
</Project>
15+
</Project>

czishrink/Directory.Packages.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<PackageVersion Include="DynamicData" Version="8.1.1" />
2222
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
2323
<PackageVersion Include="Fody" Version="6.8.0" />
24-
<PackageVersion Include="libczicompressc" Version="0.5.1-alpha.0" />
24+
<PackageVersion Include="libczicompressc" Version="0.5.2" />
2525
<PackageVersion Include="MessageBox.Avalonia" Version="3.1.5.1" />
2626
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
2727
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.1" />
@@ -37,4 +37,4 @@
3737
<PackageVersion Include="xunit" Version="2.6.1" />
3838
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.3" />
3939
</ItemGroup>
40-
</Project>
40+
</Project>

czishrink/libczicompressc/libczicompressc.nuspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
33
<metadata>
44
<id>libczicompressc</id>
5-
<version>0.5.1-alpha.0</version>
5+
<version>0.5.2</version>
66
<title>Native runtimes for CZI ZStd compression</title>
77
<authors>Carl Zeiss Microscopy</authors>
88
<owners>Carl Zeiss Microscopy</owners>
@@ -11,6 +11,6 @@
1111
<license type="expression">MIT</license>
1212
<projectUrl>https://github.com/zeissmicroscopy/czicompress/</projectUrl>
1313
<copyright>© Carl Zeiss Microscopy GmbH and others. All rights reserved.</copyright>
14-
<repository type="git" url="https://github.com/ZEISS/czicompress" branch="main" commit="029973e80f064bce28b22122213e327037eef782" />
14+
<repository type="git" url="https://github.com/ZEISS/czicompress" branch="main" commit="40a2ba8489544626c2481ca95177b3235b5c0de7" />
1515
</metadata>
1616
</package>

czishrink/netczicompressTests/Models/PInvokeFileProcessorTests.cs

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
namespace netczicompressTests.Models;
66

77
using System.Reactive.Disposables;
8+
using System.Text;
9+
using System.Xml.Linq;
10+
using System.Xml.XPath;
811

912
/// <summary>
1013
/// Tests for <see cref="PInvokeFileProcessor"/>.
@@ -23,7 +26,7 @@ public void Ctr_WhenCalledWithNoOp_Throws()
2326
[InlineData(CompressionMode.CompressUncompressed)]
2427
[InlineData(CompressionMode.CompressAll)]
2528
[InlineData(CompressionMode.CompressUncompressedAndZstd)]
26-
public void CompressAndDecompressOneFile_FilesHaveCorrectSize(
29+
public void CompressAndDecompressOneFile_FilesHaveCorrectSizeAndMetadata(
2730
CompressionMode mode)
2831
{
2932
// ARRANGE
@@ -43,13 +46,17 @@ public void CompressAndDecompressOneFile_FilesHaveCorrectSize(
4346
decompressor.ProcessFile(compressed, uncompressed, _ => { }, CancellationToken.None);
4447

4548
var compressedSize = GetLength(compressed);
49+
4650
var decompressedSize = GetLength(uncompressed);
4751
var originalSize = GetLength(testFile);
4852

4953
// ASSERT
50-
compressedSize.Should().Be(58432L);
54+
compressedSize.Should().Be(58528L);
5155
decompressedSize.Should().BeCloseTo(originalSize, 2048);
52-
decompressedSize.Should().Be(99552L);
56+
decompressedSize.Should().Be(99648L);
57+
58+
Metadata.FromFile(compressed).CurrentCompressionParameters.Should().Be("Lossless: True");
59+
Metadata.FromFile(uncompressed).CurrentCompressionParameters.Should().BeEmpty();
5360
}
5461

5562
[Theory]
@@ -114,9 +121,9 @@ public void GetLibFullName_WhenCalled_ReturnsExpected()
114121
}
115122

116123
[Theory]
117-
[InlineData(0, 99552L, 57760L)]
118-
[InlineData(2, 99552L, 57920L)]
119-
[InlineData(4, 99552L, 57472L)]
124+
[InlineData(0, 99648L, 57856L)]
125+
[InlineData(2, 99648L, 58016L)]
126+
[InlineData(4, 99648L, 57568L)]
120127
public void CompressWithLevel_FilesHaveCorrectSize(
121128
int compressionLevel, long expectedUncompressedSize, long expectedCompressedSize)
122129
{
@@ -160,4 +167,50 @@ private static string GetTestFilePath()
160167
var testFile = Path.Combine(dirname ?? ".", "mandelbrot.czi");
161168
return testFile;
162169
}
170+
171+
private class Metadata
172+
{
173+
public required XDocument Xml { get; init; }
174+
175+
public string? CurrentCompressionParameters => this.Xml
176+
.XPathSelectElement(
177+
"ImageDocument/Metadata/Information/Image/CurrentCompressionParameters")
178+
?.Value;
179+
180+
public static Metadata FromFile(string path) => new() { Xml = ParseMetadataXml(path) };
181+
182+
private static XDocument ParseMetadataXml(string filePath)
183+
{
184+
return XDocument.Parse(ReadMetadataXml(filePath));
185+
}
186+
187+
private static string ReadMetadataXml(string filePath)
188+
{
189+
// These numbers are from the ZISRAW file specification.
190+
const int SegmentHeaderSize = 16 + 8 + 8;
191+
const int MetadataPositionInFileHeader = 60;
192+
const int MetadataHeaderSize = 256;
193+
194+
using var stream = File.OpenRead(filePath);
195+
196+
// BinaryReader uses little-endian as required.
197+
using var reader = new BinaryReader(stream);
198+
199+
// Read metadataPosition from ZISRAW file header
200+
stream.Position = SegmentHeaderSize + MetadataPositionInFileHeader;
201+
long metadataHeaderPosition = reader.ReadInt64() + SegmentHeaderSize;
202+
203+
// Read size of XML from ZISRAWMETADATA header
204+
stream.Position = metadataHeaderPosition;
205+
int metadataSize = reader.ReadInt32();
206+
207+
// Read XML bytes from ZISRAWMETADATA segment
208+
stream.Position = metadataHeaderPosition + MetadataHeaderSize;
209+
var xmlBytes = reader.ReadBytes(metadataSize);
210+
211+
// Decode (always UTF-8 according to the spec)
212+
var result = Encoding.UTF8.GetString(xmlBytes);
213+
return result;
214+
}
215+
}
163216
}
-99.1 KB
Binary file not shown.

czishrink/packages_local/libczicompressc.0.5.1-alpha.0.nupkg

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
version https://git-lfs.github.com/spec/v1
2+
oid sha256:ece5a42ad9d7af0f84d1d8fb14ed47bacb58a3d54c0acc17d06af1c8a278446c
3+
size 2031800

0 commit comments

Comments
 (0)