[Dcmlib] AnonymizeNoLoad() (BIS)

Jean-Pierre Roux Jean-Pierre.Roux at creatis.insa-lyon.fr
Thu Nov 16 11:33:24 CET 2006


> Hi Greg,
>
> 	I am not sure I understand. If a DICOM file is mark read only by the
> OS, then gdcm will
> - fail to read the file
> - fail to report there is a problem ?

-> Mathieu
The pb came from AnonymizeNoLoad, that overwrites the file.
Greg's file were write protected, they were read without any pb by gdcm,
but the result code of fp->write operations is not checked at all (my
fault)
I have to fix it, and find a clever way to warn the user.

Sorry for the trouble.
Jean-Pierre Roux

>
> Thanks
> Mathieu
>
> Greg Book wrote:
>> I got it to work. It turns out the files were read-only, in Windows XP.
>> Windows doesn't generally complain when you try to access a read only
>> file. Maybe gdcm2 could give a message if the file is read-only.
>>
>> Thanks,
>> Greg
>>
>>
>>
>> Jean-Pierre Roux wrote:
>>> Greg Book wrote:
>>>
>>>> So, I'm still having this problem... Has anyone seen this problem
>>>> before? I'm wondering if it's something I'm doing wrong, or if its a
>>>> bug? And, if it is a bug, will it be fixed in version 2.0?
>>>>
>>> Now, your code looks very much like a copy-paste of
>>> Example/AnonymizeNoLoad.cxx, and AnonymizeNoLoad seems bug free ...
>>>
>>> Here, we use gdcm1.3, but it worked at gdcm1.2 time (there's an API
>>> breaking modif between 1.2 and 1.3 : we use a reference counting,
>>> therefore, we must write      f = gdcm::File::New( );
>>> and
>>> f->Delete();
>>> instead of
>>> f = new gdcm::File();
>>> and
>>> delete f;
>>>
>>> gdcm2.0  will be something quite different, and was developed by
>>> Mathieu, when he has some time left.
>>> No date can be anounced for the first gdcm2 'stable release' (Mathieu
>>> : any comment?)
>>> Could you send me one of your files : I would like to check if there
>>> is nothing 'strange' in the header that would break somewhere in gdcm ?
>>> Thx
>>> Jean-Pierre Roux
>>>
>>>> Thanks,
>>>> Greg
>>>>
>>>>
>>>>
>>>> Greg Book wrote:
>>>>
>>>>> I finally got around to working on it last night. I now have the
>>>>> following code, but the dicom file is not anonymized. I put in a
>>>>> break point, and the file object has the correct anonymize elements.
>>>>>
>>>>>         f = new gdcm::File();
>>>>>         f->SetLoadMode(gdcm::LD_ALL);
>>>>>         f->SetFileName(filelist.Item(i).c_str());
>>>>>         if (!f->Load()) {
>>>>>             delete f;
>>>>>             continue;
>>>>>         }
>>>>>
>>>>>         f->AddAnonymizeElement( 0x0010, 0x0010, "Non^Person");
>>>>>
>>>>>         f->AnonymizeNoLoad();
>>>>>         f->ClearAnonymizeList();
>>>>>         delete f;
>>>>>
>>>>> -Greg
>>>>>
>>>>>
>>>>>
>>>>> Jean-Pierre Roux wrote:
>>>>>
>>>>>> Greg Book wrote:
>>>>>>
>>>>>>> I added f->Load(), but still nothing happens. This is on Windows
>>>>>>> XP, using gdcm 1.2.2 downloaded from sourceforge. Here is the new
>>>>>>> code:
>>>>>>>
>>>>>>>     for (i=0;i<filelist.Count();i++) {
>>>>>>>         /* open dicom file */
>>>>>>>         f = new gdcm::File();
>>>>>>>         f->SetLoadMode(gdcm::LD_ALL);
>>>>>>>         f->SetFileName(filelist.Item(i).c_str());
>>>>>>>         /* determine which fields to anonymize */
>>>>>>
>>>>>>
>>>>>>
>>>>>> --> I'm not sure of what you want to do here :
>>>>>> --> What is chkPatientName?
>>>>>> --> When I replace, in your code the following lines by :
>>>>>>        f->AddAnonymizeElement( 0x0010, 0x0010, "g^Fantomas" );
>>>>>>        f->AddAnonymizeElement( 0x0010, 0x0030,"11111111" );
>>>>>>        f->AddAnonymizeElement( 0x0008, 0x0020, "11111111");
>>>>>> etc
>>>>>> the file is anonymized ?!?
>>>>>>
>>>>>> Jean-Pierre
>>>>>>
>>>>>>>         if (chkPatientName->GetValue())
>>>>>>>             f->AddAnonymizeElement( 0x0010, 0x0010,
>>>>>>> txtPatientName->GetValue().c_str());
>>>>>>>         if (chkPatientBirthdate->GetValue())
>>>>>>>             f->AddAnonymizeElement( 0x0010, 0x0030,
>>>>>>> txtPatientBirthdate->GetValue().c_str());
>>>>>>>         if (chkStudyDate->GetValue())
>>>>>>>             f->AddAnonymizeElement( 0x0008, 0x0020,
>>>>>>> txtStudyDate->GetValue().c_str());
>>>>>>>         if (chkSeriesDate->GetValue())
>>>>>>>             f->AddAnonymizeElement( 0x0008, 0x0021,
>>>>>>> txtSeriesDate->GetValue().c_str());
>>>>>>>                if (!f->Load()) {
>>>>>>>             delete f;
>>>>>>>             continue;
>>>>>>>         }
>>>>>>>         f->AnonymizeNoLoad();
>>>>>>>         f->ClearAnonymizeList();
>>>>>>>         /* close the file */
>>>>>>>         delete f;
>>>>>>>     }
>>>>>>>
>>>>>>> -Greg
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Jean-Pierre Roux wrote:
>>>>>>>
>>>>>>>> Jean-Pierre Roux wrote:
>>>>>>>>
>>>>>>>>> Greg Book wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> I'm attempting to anonymize a file using
>>>>>>>>>> gdcm::File::AnonymizeNoLoad(). I use the following code, but
>>>>>>>>>> the file is not anonymized, the file date is not changed either.
>>>>>>>>>> What might be happening?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> --> OK : my answer may look strange
>>>>>>>> Please use
>>>>>>>>
>>>>>>>> f->Load()
>>>>>>>> juste before using f->AnonymizeNoLoad()
>>>>>>>>
>>>>>>>> This is not a mistake, just a stupid name for AnonymizeNoLoad :
>>>>>>>> NoLoad was *not* "don't load the file header", but "don't load
>>>>>>>> the pixels in memory".
>>>>>>>> The right name should be : AnonymizeNoGetData
>>>>>>>>
>>>>>>>>
>>>>>>>> Jean-Pierre Roux
>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Greg
>>>>>>>>>>
>>>>>>>>>>        /* open dicom file */
>>>>>>>>>>        f = new gdcm::File();
>>>>>>>>>>        f->SetLoadMode(gdcm::LD_ALL);
>>>>>>>>>>        f->SetFileName(filelist.Item(i).c_str());
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I'm not on my PC, and I cannot check, but I think you should
>>>>>>>>> Load the gdcm::File  here.
>>>>>>>>>
>>>>>>>>>      if ( !f->Load() )
>>>>>>>>>      {
>>>>>>>>>          std::cout << "[" << fileName << "] is not a
>>>>>>>>> gdcm-readable file"
>>>>>>>>>              << std::endl;
>>>>>>>>>           f->Delete();
>>>>>>>>>           return 1;
>>>>>>>>>      }
>>>>>>>>>
>>>>>>>>> (Have a look at Example/AnonymizeNoLoad.xx)
>>>>>>>>> HTH
>>>>>>>>> Jean-Pierre Roux
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>        /* determine which fields to anonymize */
>>>>>>>>>>        if (chkPatientName->GetValue())
>>>>>>>>>>            f->AddAnonymizeElement( 0x0010, 0x0010,
>>>>>>>>>> txtPatientName->GetValue().c_str());
>>>>>>>>>>        if (chkPatientBirthdate->GetValue())
>>>>>>>>>>            f->AddAnonymizeElement( 0x0010, 0x0030,
>>>>>>>>>> txtPatientBirthdate->GetValue().c_str());
>>>>>>>>>>        if (chkStudyDate->GetValue())
>>>>>>>>>>            f->AddAnonymizeElement( 0x0008, 0x0020,
>>>>>>>>>> txtStudyDate->GetValue().c_str());
>>>>>>>>>>        if (chkSeriesDate->GetValue())
>>>>>>>>>>            f->AddAnonymizeElement( 0x0008, 0x0021,
>>>>>>>>>> txtSeriesDate->GetValue().c_str());
>>>>>>>>>>              /* close the file */
>>>>>>>>>>        f->AnonymizeNoLoad();
>>>>>>>>>>        f->ClearAnonymizeList();
>>>>>>>>>>        delete f;
>>>>>>>>>>
>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Dcmlib mailing list
>>>>>>>>>> Dcmlib at creatis.insa-lyon.fr
>>>>>>>>>> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Dcmlib mailing list
>>>>>>>>> Dcmlib at creatis.insa-lyon.fr
>>>>>>>>> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Dcmlib mailing list
>>>>> Dcmlib at creatis.insa-lyon.fr
>>>>> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
>>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> Dcmlib mailing list
>>>> Dcmlib at creatis.insa-lyon.fr
>>>> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
>>>>
>>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Dcmlib mailing list
>> Dcmlib at creatis.insa-lyon.fr
>> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
>
> _______________________________________________
> Dcmlib mailing list
> Dcmlib at creatis.insa-lyon.fr
> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
>




More information about the Dcmlib mailing list