Я использую GDCM на iOS. Я еще не очень старался, но пока все работает хорошо. В этой замечательной статье на ITK .
я в основном следовал указаниям по взлому проектов XCode для iOS.
Вот как я получил его для компиляции для iOS:
- Загруженный источник из sourceforge, установленный cmake через порты. Вам понадобится последняя версия cmake (я использую 2.8.2)
- Если источник находится в папке с именем gdcm-2.0.17 /, создайте другой каталог на этом уровне (скажем, gdcmbin), перейдите в этот каталог и введите ccmake -GXCode ../gdcm-2.0. 17 / в окне терминала. Это создает проект XCode. Когда я сделал это, я не создал ни одной из примеров программ или общих библиотек (которые не будут работать в iOS). Просто запустите настройки по умолчанию.
- Следуйте указаниям в документе ITK об изменении параметров сборки (шаг № 7 на стр. 4).
- Затем подключите GDCM к своему проекту, используя отличные инструкции на Блог Клинта Харриса
- Когда вы настраиваете путь поиска заголовка в своем проекте для GDCM - вам нужно ввести два пути: бла / gdcm-2.0.17 / Source / ** и бла / gdcmbin / **. Конечный '/ Source' на первом пути необходим, иначе вы получите заголовки, которые не подходят для вашей архитектуры.
- Один глюк (раздражает, но пока не потратил время на то, чтобы разобраться): вы получаете кучу ошибок связывания при переключении с симулятора на устройство (или наоборот). Это связано с тем, что проект gdcm не помещает выходные данные в разные каталоги для разных целей. Итак - запустите команду clean и rebuild в проекте gdcm, когда вы переключаетесь. Я, вероятно, скоро буду раздражен этим, чтобы изменить это: -).
Вот грубый фрагмент того, как вы бы назвали библиотеку и поместили результаты в словарь Objective-C:
NSMutableDictionary * imageDictionary = [[NSMutableDictionary alloc] initWithCapacity:40];
// The output of gdcm::Reader is a gdcm::File
gdcm::File &file = reader.GetFile();
// the dataset is the the set of element we are interested in:
gdcm::DataSet &ds = file.GetDataSet();
const Tag studyInstance(0x0020,0x000d); // Study Instance UID
const DataElement &dicomVal = ds.GetDataElement(studyInstance);
std::string stringVal( dicomVal.GetByteValue()->GetPointer(), dicomVal.GetByteValue()->GetLength() );
NSString *val = [NSString stringWithCString:stringVal.c_str() encoding:[NSString defaultCStringEncoding]];
[imageDictionary setObject:val forKey:@"studyInstanceUID"];
(Примечание: это файл * .mm, в котором смешаны C ++ и ObjectiveC)