From 8ca5d1f676d9632ae286b43d9b0c5d45592ff385 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 19 Apr 2023 14:23:23 -0400 Subject: [PATCH] BUG: MRC write full machine stamp The MRC2014 specification updated/clarifed the spec that the first two bytes should contain the specified value to determine endian. This appears to be enforced with Python mrcfile. This patch enables compatibility. --- Modules/IO/MRC/include/itkMRCHeaderObject.h | 4 ++-- Modules/IO/MRC/src/itkMRCImageIO.cxx | 2 ++ Modules/IO/MRC/test/itkMRCImageIOTest2.cxx | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Modules/IO/MRC/include/itkMRCHeaderObject.h b/Modules/IO/MRC/include/itkMRCHeaderObject.h index 6b95976ce7d..23cd3357486 100644 --- a/Modules/IO/MRC/include/itkMRCHeaderObject.h +++ b/Modules/IO/MRC/include/itkMRCHeaderObject.h @@ -164,8 +164,8 @@ class ITKIOMRC_EXPORT MRCHeaderObject : public LightObject float zorg; char cmap[4]; /**< Contains "MAP " */ - char stamp[4]; /**< First byte has 17 for big- or 68 for - little-endian */ + char stamp[4]; /**< First two bytes have 17 and 17 for big-endian or + 68 and 68 for little-endian */ float rms; // ALL HEADERS: diff --git a/Modules/IO/MRC/src/itkMRCImageIO.cxx b/Modules/IO/MRC/src/itkMRCImageIO.cxx index f866f37e9e5..5293963d67a 100644 --- a/Modules/IO/MRC/src/itkMRCImageIO.cxx +++ b/Modules/IO/MRC/src/itkMRCImageIO.cxx @@ -358,10 +358,12 @@ MRCImageIO::UpdateHeaderFromImageIO() if (ByteSwapper::SystemIsBigEndian()) { header.stamp[0] = 17; + header.stamp[1] = 17; } else { header.stamp[0] = 68; + header.stamp[1] = 68; } header.alpha = 90; diff --git a/Modules/IO/MRC/test/itkMRCImageIOTest2.cxx b/Modules/IO/MRC/test/itkMRCImageIOTest2.cxx index 2a16dbee158..444d8c4f546 100644 --- a/Modules/IO/MRC/test/itkMRCImageIOTest2.cxx +++ b/Modules/IO/MRC/test/itkMRCImageIOTest2.cxx @@ -24,6 +24,9 @@ #include "itkMetaDataObject.h" #include "itkTestingHashImageFilter.h" + +static_assert(sizeof(itk::MRCHeaderObject::Header) == 1024, " Ill defined MRC Header struct"); + namespace {