读取图像
1、根据图像名称读取图像
const SbString imageToLoad = "$OIVHOME/examples/data/ImageViz/autorad.tif";
SoRef<SoFileDataAdapter> imageAdapter = new SoFileDataAdapter();
imageAdapter->fileName.setValue(imageToLoad);
2、创建图像内存
// 2- Create a Memory Data adapter containing a 512x512 image
// 2.1- Instanciate a CPU buffer object
SbVec4i32 imageSize( 512, 512, 1, 1 );
SoRef<SoCpuBufferObject> imageBuffer = new SoCpuBufferObject();
imageBuffer->setSize( imageSize[0]*imageSize[1]*sizeof( unsigned char ) );
// 2.2- Define a synthetic square in this buffer object
unsigned char* imageData = static_cast<unsigned char*>( imageBuffer->map( SoCpuBufferObject::SET ) );
int borderX = imageSize[0] / 4; // Vertical border around the square
int borderY = imageSize[1] / 4; // Horizontal border around the square
// Loop on image rows
for ( int i = 0; i < imageSize[0]; ++i )
{
// Loop on image columns
for ( int j = 0; j < imageSize[1]; ++j )
{
if ( ( i >= borderX ) && ( i <= imageSize[0] - borderX ) && ( j >= borderY ) && ( j <= imageSize[1] - borderY ) )
imageData[j * imageSize[0] + i] = 255; // Value inside the square
else
imageData[j * imageSize[0] + i] = 128; // Background value
}
}
imageBuffer->unmap();
// 2.3- Instanciate a memory image adapter containing the data of the buffer object
SoRef<SoMemoryDataAdapter> memoryImage = SoMemoryDataAdapter::createMemoryDataAdapter(
imageSize, SbImageDataType( 1, SbDataType::UNSIGNED_BYTE ),
SoMemoryDataAdapter::CONTIGUOUS_PER_PIXEL , imageBuffer.ptr()
);
3、下载am图像文件
#define INPUT_DATASET "$OIVHOME/examples/data/ImageViz/medicalFoot.binary.am"
SoRef<SoFileDataAdapter> imageAdapter = new SoFileDataAdapter();
imageAdapter->fileName = INPUT_DATASET;
imageAdapter->interpretation = SoImageDataAdapter::BINARY;