bmp save to dicom

因为每种图像的保存格式不同,将其转换成dicom也是不一样的,如下是bmp转换成dicom的主要代码,主要用dcmtk实现:

#include "dcmtk/dcmimgle/dcmimage.h" 
#include "dcmtk/dcmdata/dcistrmf.h"
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/config/osconfig.h"

#include "dcmtk/dcmdata/dcpixel.h"
#include "dcmtk/dcmdata/dcpixseq.h"
#include "dcmtk/dcmdata/dcpxitem.h"

#include 
/*----BMP图像解析----*/
#include "dcmtk/dcmdata/libi2d/i2dbmps.h"

#include "dcmtk/dcmdata/libi2d/i2doutpl.h"
#include "dcmtk/dcmdata/dcerror.h"

void BmpToDicom(const char* cFileName, const char * dicomName)
{
		OFCondition status;
		DcmFileFormat fileformat;
		DcmDataset* mydatasete = fileformat.getDataset();
		
	
		Uint16 rows, cols, samplePerPixel, bitsAlloc, bitsStored, highBit, pixelRpr, planConf, pixAspectH, pixAspectV;
		OFString photoMetrInt;
		Uint32 length;
	
		E_TransferSyntax ts;
	
	
		OFString filename = OFString(cFileName);
		I2DBmpSource* bmpSource = new I2DBmpSource();
		bmpSource->setImageFile(filename);
		char* pixData = new char[1024 * 1024 * 10];
		
		memset(pixData, 0, sizeof(char) * 1024 * 1024 * 10);
	
		status = bmpSource->readPixelData(rows, cols, samplePerPixel, photoMetrInt, bitsAlloc, bitsStored, highBit, pixelRpr, planConf, pixAspectH, pixAspectV, pixData, length, ts);
	
		if (status.bad()) {
		  std::cout << "read image data failed:" << status.text();
		  return ;
		}
			
		delete bmpSource;
		mydatasete->putAndInsertUint16(DCM_SamplesPerPixel, samplePerPixel);
	
		mydatasete->putAndInsertString(DCM_NumberOfFrames, "1");
	
		mydatasete->putAndInsertUint16(DCM_Rows, rows);
	
		mydatasete->putAndInsertUint16(DCM_Columns, cols);
	
		mydatasete->putAndInsertUint16(DCM_BitsAllocated, bitsAlloc);
	
		mydatasete->putAndInsertUint16(DCM_BitsStored, bitsStored);
	
		mydatasete->putAndInsertUint16(DCM_HighBit, highBit);
	
		mydatasete->putAndInsertUint8Array(DCM_PixelData, (Uint8*)pixData,  length);
	
		mydatasete->putAndInsertOFStringArray(DCM_PhotometricInterpretation, photoMetrInt);
	
		status = fileformat.saveFile(dicomName, ts);
	
		if (status.bad())
	
		{
			std::cout << "Error:(" << status.text() << ")\n";
			
		}
}

 

你可能感兴趣的:(dcmtk)