bool itkDataImageReaderBase::read_image(const QString& path,const char* type) { medAbstractData* medData = dynamic_cast<medAbstractData*>(this->data()); if (medData && medData->identifier()!=type) return false; typedef itk::Image<T,DIM> Image; typename itk::ImageFileReader<Image>::Pointer TReader = itk::ImageFileReader<Image>::New(); TReader->SetImageIO(this->io); TReader->SetFileName(path.toAscii().constData()); TReader->SetUseStreaming(true); typename Image::Pointer im = TReader->GetOutput(); medData->setData(im); // Recover the pixel meaning from the intent_name. const itk::MetaDataDictionary dict = im->GetMetaDataDictionary(); std::string PixMeaning; if (itk::ExposeMetaData(dict,"intent_name",PixMeaning)) medData->addMetaData(medAbstractImageData::PixelMeaningMetaData,QString(PixMeaning.c_str())); TReader->Update(); return true; }
bool itkDataImageWriterBase::write_image(const QString& path,const char* type) { medAbstractData* medData = dynamic_cast<medAbstractData*>(this->data()); if (medData && medData->identifier()!=type) return false; typedef itk::Image<T,DIM> Image; typename Image::Pointer image = dynamic_cast<Image*>((itk::Object*)(this->data()->output())); if (image.IsNull()) return false; if (medData->hasMetaData(medAbstractImageData::PixelMeaningMetaData)) { itk::MetaDataDictionary& dict = image->GetMetaDataDictionary(); itk::EncapsulateMetaData(dict,"intent_name",medData->metadata(medAbstractImageData::PixelMeaningMetaData)); } typename itk::ImageFileWriter<Image>::Pointer writer = itk::ImageFileWriter <Image>::New(); writer->SetImageIO (this->io); writer->UseCompressionOn(); writer->SetFileName(path.toLatin1().constData()); writer->SetInput(image); writer->Update(); return true; }