I could developed a DICOM writer system (reads a Bitmap and generate a .dcm file) using DCMTK. At this point I can write a dicom file with its header and pixel data. The problem is when I try to read it with some dicom readers the image is shown perfectly but with others programs I get a whole white image.(I get a white image with eFilm Medical Inc. product). Here is the code. I Would really appreciate any suggestion because I'm clueless
Code: Select all
#include <diregist.h>
#include <diutils.h>
#include <dcmimage.h>
#include <dcdeftag.h>
#include <ofstdinc.h>
#include <ofstd.h>
#include <ofcond.h>
#include <dcfilefo.h>
#include <dcdatset.h>
void main(void)
{
BITMAPFILEHEADER bmpFH;
BITMAPINFOHEADER bmpIH;
unsigned char *contenidoBMP;
FILE *imagen;
if ( (imagen = fopen("1.bmp","r+")) == NULL )
{
printf("no existe");
exit(0);
}
fread(&bmpFH,sizeof(bmpFH),1,imagen);
fread(&bmpIH,sizeof(bmpIH),1,imagen);
fseek(imagen, bmpFH.bfOffBits, SEEK_SET);
contenidoBMP = (unsigned char *) malloc( bmpIH.biSizeImage );
fread(contenidoBMP, bmpIH.biSizeImage ,1,imagen);
DcmFileFormat fileformat;
DcmDataset *dataset = fileformat.getDataset();
/////////////////////////////////
dataset->putAndInsertString(DCM_SOPClassUID, "SOPClassUID");
dataset->putAndInsertString(DCM_SOPInstanceUID, "SOPInstanceUID");
/////////////////////////////////
dataset->putAndInsertString(DCM_PatientsName, "Test Dicom");
dataset->putAndInsertString(DCM_PatientID,"");
dataset->putAndInsertString(DCM_PatientsBirthDate,"");
dataset->putAndInsertString(DCM_PatientsSex,"");
//////////////////////////////////
dataset->putAndInsertString(DCM_StudyInstanceUID,"StudyInstanceUID");
dataset->putAndInsertString(DCM_StudyDate,"");
dataset->putAndInsertString(DCM_StudyTime,"");
dataset->putAndInsertString(DCM_StudyID,"");
dataset->putAndInsertString(DCM_ReferringPhysiciansName,"");
////////////////////////////////
dataset->putAndInsertString(DCM_SeriesInstanceUID,"SeriesInstanceUID");
dataset->putAndInsertString(DCM_SeriesNumber,"");
dataset->putAndInsertString(DCM_Modality,"Modality");
dataset->putAndInsertString(DCM_Manufacturer,"");
dataset->putAndInsertString(DCM_InstitutionName,"");
////////////////////////////////
dataset->putAndInsertString(DCM_ImageID,"ImageID");
dataset->putAndInsertString(DCM_InstanceNumber,"");
dataset->putAndInsertString(DCM_ImageType,"");
////////////////////////////////
dataset->putAndInsertString(DCM_BitsAllocated,"8");
dataset->putAndInsertString(DCM_BitsStored,"8");
dataset->putAndInsertString(DCM_HighBit,"0");
dataset->putAndInsertString(DCM_Rows,"576");
dataset->putAndInsertString(DCM_Columns,"768");
dataset->putAndInsertString(DCM_SamplesPerPixel,"1");
dataset->putAndInsertString(DCM_PlanarConfiguration,"1");
dataset->putAndInsertString(DCM_PixelRepresentation,"0");
dataset->putAndInsertString(DCM_PhotometricInterpretation,"MONOCHROME2");
//////////////////////////////
//////////////////////////////
dataset->putAndInsertUint8Array(DCM_PixelData, contenidoBMP, bmpIH.biSizeImage);
/////////////////////////////////////////////////
dataset->putAndInsertString(DCM_WindowCenter,"");
dataset->putAndInsertString(DCM_WindowWidth,"");
//////////////// Saving the file ////////////////
OFCondition status = fileformat.saveFile("test.dcm", EXS_LittleEndianExplicit);
fclose(imagen);
}
Sincerely,
Leonardo Seminara