comparison OrthancFramework/UnitTestsSources/FromDcmtkTests.cpp @ 5318:68e15471b408

added ParsedDicomFile::InjectEmptyPixelData()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 23 Jun 2023 18:01:55 +0200
parents 800261398381
children f2e1ad71e49c
comparison
equal deleted inserted replaced
5317:9875e1f24394 5318:68e15471b408
3219 DicomMap m; 3219 DicomMap m;
3220 m.FromDicomWeb(v); 3220 m.FromDicomWeb(v);
3221 } 3221 }
3222 3222
3223 3223
3224 TEST(ParsedDicomFile, InjectEmptyPixelData)
3225 {
3226 static const char* PIXEL_DATA = "7FE00010";
3227
3228 {
3229 ParsedDicomFile dicom(true);
3230
3231 DicomWebJsonVisitor visitor;
3232 dicom.Apply(visitor);
3233
3234 ASSERT_FALSE(visitor.GetResult().isMember(PIXEL_DATA));
3235 }
3236
3237 {
3238 ParsedDicomFile dicom(true);
3239 dicom.InjectEmptyPixelData(ValueRepresentation_OtherByte);
3240 dicom.InjectEmptyPixelData(ValueRepresentation_OtherWord); // Must be ignored
3241
3242 DicomWebJsonVisitor visitor;
3243 dicom.Apply(visitor);
3244
3245 ASSERT_TRUE(visitor.GetResult().isMember(PIXEL_DATA));
3246 ASSERT_EQ(2u, visitor.GetResult() [PIXEL_DATA].size());
3247 ASSERT_EQ("", visitor.GetResult() [PIXEL_DATA]["InlineBinary"].asString());
3248 ASSERT_EQ("OB", visitor.GetResult() [PIXEL_DATA]["vr"].asString());
3249 }
3250
3251 {
3252 ParsedDicomFile dicom(true);
3253 dicom.InjectEmptyPixelData(ValueRepresentation_OtherWord);
3254 dicom.InjectEmptyPixelData(ValueRepresentation_OtherByte); // Must be ignored
3255
3256 DicomWebJsonVisitor visitor;
3257 dicom.Apply(visitor);
3258
3259 ASSERT_TRUE(visitor.GetResult().isMember(PIXEL_DATA));
3260 ASSERT_EQ(2u, visitor.GetResult() [PIXEL_DATA].size());
3261 ASSERT_EQ("", visitor.GetResult() [PIXEL_DATA]["InlineBinary"].asString());
3262 ASSERT_EQ("OW", visitor.GetResult() [PIXEL_DATA]["vr"].asString());
3263 }
3264 }
3265
3266
3267 TEST(ParsedDicomFile, DISABLED_InjectEmptyPixelData2)
3268 {
3269 static const char* PIXEL_DATA = "7FE00010";
3270
3271 for (int i = 0; i <= DicomTransferSyntax_XML; i++)
3272 {
3273 DicomTransferSyntax a = (DicomTransferSyntax) i;
3274
3275 std::string path = (std::string(getenv("HOME")) +
3276 "/Subversion/orthanc-tests/Database/TransferSyntaxes/" +
3277 std::string(GetTransferSyntaxUid(a)) + ".dcm");
3278 if (Orthanc::SystemToolbox::IsRegularFile(path))
3279 {
3280 printf("\n======= %s\n", GetTransferSyntaxUid(a));
3281
3282 std::string source;
3283 Orthanc::SystemToolbox::ReadFile(source, path);
3284
3285 ParsedDicomFile dicom(source);
3286 std::unique_ptr<DcmElement> removal(dicom.GetDcmtkObject().getDataset()->remove(DCM_PixelData));
3287
3288 {
3289 DicomWebJsonVisitor visitor;
3290 dicom.Apply(visitor);
3291 ASSERT_FALSE(visitor.GetResult().isMember(PIXEL_DATA));
3292 }
3293
3294 {
3295 DicomWebJsonVisitor visitor;
3296 dicom.InjectEmptyPixelData(ValueRepresentation_OtherByte);
3297 dicom.Apply(visitor);
3298 ASSERT_TRUE(visitor.GetResult().isMember(PIXEL_DATA));
3299 ASSERT_EQ("OB", visitor.GetResult() [PIXEL_DATA]["vr"].asString());
3300 }
3301
3302 removal.reset(dicom.GetDcmtkObject().getDataset()->remove(DCM_PixelData));
3303
3304 {
3305 DicomWebJsonVisitor visitor;
3306 dicom.InjectEmptyPixelData(ValueRepresentation_OtherWord);
3307 dicom.Apply(visitor);
3308 ASSERT_TRUE(visitor.GetResult().isMember(PIXEL_DATA));
3309 ASSERT_EQ("OW", visitor.GetResult() [PIXEL_DATA]["vr"].asString());
3310 }
3311 }
3312 }
3313 }
3314
3315
3224 3316
3225 3317
3226 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 3318 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1
3227 3319
3228 #include "../Sources/DicomNetworking/DicomStoreUserConnection.h" 3320 #include "../Sources/DicomNetworking/DicomStoreUserConnection.h"
3238 scu.SetRetiredBigEndianProposed(true); 3330 scu.SetRetiredBigEndianProposed(true);
3239 3331
3240 DcmtkTranscoder transcoder; 3332 DcmtkTranscoder transcoder;
3241 3333
3242 for (int j = 0; j < 2; j++) 3334 for (int j = 0; j < 2; j++)
3335 {
3243 for (int i = 0; i <= DicomTransferSyntax_XML; i++) 3336 for (int i = 0; i <= DicomTransferSyntax_XML; i++)
3244 { 3337 {
3245 DicomTransferSyntax a = (DicomTransferSyntax) i; 3338 DicomTransferSyntax a = (DicomTransferSyntax) i;
3246 3339
3247 std::string path = ("/home/jodogne/Subversion/orthanc-tests/Database/TransferSyntaxes/" + 3340 std::string path = (std::string(getenv("HOME")) +
3341 "/Subversion/orthanc-tests/Database/TransferSyntaxes/" +
3248 std::string(GetTransferSyntaxUid(a)) + ".dcm"); 3342 std::string(GetTransferSyntaxUid(a)) + ".dcm");
3249 if (Orthanc::SystemToolbox::IsRegularFile(path)) 3343 if (Orthanc::SystemToolbox::IsRegularFile(path))
3250 { 3344 {
3251 printf("\n======= %s\n", GetTransferSyntaxUid(a)); 3345 printf("\n======= %s\n", GetTransferSyntaxUid(a));
3252 3346
3270 throw; 3364 throw;
3271 } 3365 }
3272 } 3366 }
3273 } 3367 }
3274 } 3368 }
3369 }
3275 } 3370 }
3276 3371
3277 3372
3278 TEST(Toto, DISABLED_Transcode4) 3373 TEST(Toto, DISABLED_Transcode4)
3279 { 3374 {
3280 std::unique_ptr<DcmFileFormat> toto; 3375 std::unique_ptr<DcmFileFormat> toto;
3281 3376
3282 { 3377 {
3283 std::string source; 3378 std::string source;
3284 Orthanc::SystemToolbox::ReadFile(source, "/home/jodogne/Subversion/orthanc-tests/Database/KarstenHilbertRF.dcm"); 3379 Orthanc::SystemToolbox::ReadFile(source, std::string(getenv("HOME")) +
3380 "/Subversion/orthanc-tests/Database/KarstenHilbertRF.dcm");
3285 toto.reset(FromDcmtkBridge::LoadFromMemoryBuffer(source.c_str(), source.size())); 3381 toto.reset(FromDcmtkBridge::LoadFromMemoryBuffer(source.c_str(), source.size()));
3286 } 3382 }
3287 3383
3288 const std::string sourceUid = IDicomTranscoder::GetSopInstanceUid(*toto); 3384 const std::string sourceUid = IDicomTranscoder::GetSopInstanceUid(*toto);
3289 3385