+ float yspacing;
+ uint32_t nbValue;
+ DataEntry *entry;
+ bool ok = false;
+
+ std::string SOPClassUID = GetEntryString(0x0008,0x0016);
+
+ /// \todo check the various SOP Class
+ /// to get the Pixel Spacing at the proper location
+
+ ///\todo find images to check if it *actually* works
+
+ if (Util::DicomStringEqual( SOPClassUID,"1.2.840.10008.5.1.4.1.1.6")
+ // Ultrasound Image Storage (Retired)
+ || Util::DicomStringEqual( SOPClassUID,"1.2.840.10008.5.1.4.1.1.6.1")
+ // Ultrasound Image Storage
+ || Util::DicomStringEqual( SOPClassUID,"1.2.840.10008.5.1.4.1.1.3")
+ // Ultrasound Multi-Frame Storage (Retired)
+ || Util::DicomStringEqual( SOPClassUID,"1.2.840.10008.5.1.4.1.1.3.1") )
+ // Ultrasound Multi-FrameImage Storage
+ {
+ // - check if SOPClassUID contains 2 parts (e.g. "4\3")
+ // - no way to deduce the spacing/
+
+ entry = GetDataEntry(0x0028,0x0034);
+ if ( entry )
+ {
+ nbValue = entry->GetValueCount();
+ if( nbValue ==2 ) {
+ yspacing = (float)entry->GetValue(0)/(float)entry->GetValue(1);
+ //std::cout << "ys " << yspacing << std::endl;
+ ok = true;
+ }
+ else
+ {
+ gdcmWarningMacro("PixelAspectRatio (0x0028,0x0034) "
+ << "has a wrong number of values :" << nbValue);
+ if (nbValue == 0 ) {
+ ok = false;
+ }
+ else if (nbValue == 1 ) {
+ yspacing = 1.0; // We get Pixel Aspect Ratio, not Spacing ...
+ ok = true;
+ }
+ }
+ }
+
+ if (ok)
+ return yspacing;
+ }
+
+ // go on with old method ...
+ // ---------------------
+ // To follow David Clunie's advice, we first check ImagerPixelSpacing
+ yspacing = 1.0;