[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