diff --git a/Code/IO/otbStreamingImageFileWriter.txx b/Code/IO/otbStreamingImageFileWriter.txx index baff8344116db1087694b97b84a2e2f61924363d..be108aabd3de590db724046bf6a0441f7583a0bf 100644 --- a/Code/IO/otbStreamingImageFileWriter.txx +++ b/Code/IO/otbStreamingImageFileWriter.txx @@ -424,6 +424,13 @@ StreamingImageFileWriter<TInputImage> itkExceptionMacro(<< "No filename was specified"); } + + // Make sure CanWriteFile is called + // either from ImageIOFactory::CreateImageIO or directly in this file + // GDALImageIO uses it to store the filename + // and later answer to CanStreamWrite() + // This is a needed workaround to a defect in the itk::ImageIO interface + if (m_ImageIO.IsNull()) //try creating via factory { itkDebugMacro(<< "Attempting factory creation of ImageIO for file: " @@ -435,16 +442,21 @@ StreamingImageFileWriter<TInputImage> } else { - if (m_FactorySpecifiedImageIO && !m_ImageIO->CanWriteFile(m_FileName.c_str())) + if (!m_ImageIO->CanWriteFile(m_FileName.c_str())) { itkDebugMacro(<< "ImageIO exists but doesn't know how to write file:" << m_FileName); - itkDebugMacro(<< "Attempting creation of ImageIO with a factory for file:" - << m_FileName); - m_ImageIO = ImageIOFactory::CreateImageIO(m_FileName.c_str(), - itk::ImageIOFactory::WriteMode); - m_FactorySpecifiedImageIO = true; + + if (m_FactorySpecifiedImageIO) + { + itkDebugMacro(<< "Attempting creation of ImageIO with a factory for file:" + << m_FileName); + m_ImageIO = ImageIOFactory::CreateImageIO(m_FileName.c_str(), + itk::ImageIOFactory::WriteMode); + m_FactorySpecifiedImageIO = true; + } } + } if (m_ImageIO.IsNull())