**用户层面**:itkImageFileReader(读) itkImageFileWriter(写)
**内部实现**:由内部ImageIO对象具体负责图像文件读写操作,该对象通过对象工厂根据用户输入文件类型生成相应的ImageIO对象
**优点**
* 使用方便,用户无须关注内部实现细节
* 扩展方便,扩展支持新的图像读取而无须修改用户接口,只需添加相应的工厂类和IO类
运行下面的代码:
#**include** "itkImage.h"
#**include** "itkImageFileReader.h"
#**include** "itkImageFileWriter.h"
**int** main(**int** argc, **char*** argv[])
{
**const** **unsigned** **int** Dimension = 2; //定义图像维数
**typedef** **unsigned** **char** PixelType; //定义像素类型
**typedef** itk::Image< PixelType, Dimension > ImageType; //图像类型
**typedef** itk::ImageFileReader< ImageType > ReaderType;
**typedef** itk::ImageFileWriter< ImageType > WriterType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName("d:\\1.png");
WriterType::Pointer writer = WriterType::New();
writer->SetFileName("d:\\11.png");
writer->SetInput(reader->GetOutput());
writer->Update();
**return** 0;
}
运行中出现itk::ImageFileReaderException。
itk example中也有这样不指定读写类型的,可以运行。但是单独使用时,却出现无法识别类型的问题。
出错信息如下:
ExceptionObject caught!itk::ImageFileReaderException (0028F27C)
Location: "void __thiscall itk::ImageFileReader<class itk::Image<unsigned char,2
>,class itk::DefaultConvertPixelTraits<unsigned char> >::GenerateOutputInformati
on(void)"
File: c:\program files (x86)\itk\include\itk-4.4\itkimagefilereader.hxx
Line: 143
Description: Could not create IO object **for** file d:\1.png
Tried to create one of the following:
You probably failed to set a file suffix, or
set the suffix to an unsupported type.
typedef itk::PNGImageIO ImageIOType;
ImageIOType::Pointer pngIO = ImageIOType::New();
reader->SetImageIO(pngIO);
writer->SetImageIO(pngIO);