Code: Select all
class CustomPixelData : DcmPixelItem
{
public:
CustomPixelData(char const* file, const DcmTag &tag, const Uint32 len = 0) : DcmPixelItem(tag, len)
{
std::vector<char> fileBytes = ReadAllBytes(file);
putUint8Array(OFreinterpret_cast(Uint8*, &fileBytes[0]), fileBytes.size());
};
};
DcmFileFormat fileFormat;
DcmDataset *dataset = fileFormat.getDataset();
dataset->putAndInsertString(DCM_LossyImageCompression, "01");
dataset->putAndInsertString(DCM_PhotometricInterpretation, "YBR_PARTIAL_420");
dataset->putAndInsertUint16(DCM_SamplesPerPixel, 3);
dataset->putAndInsertUint16(DCM_BitsAllocated, 8);
dataset->putAndInsertUint16(DCM_BitsStored, 8);
dataset->putAndInsertUint16(DCM_HighBit, 7);
dataset->putAndInsertUint16(DCM_PlanarConfiguration, 0);
dataset->putAndInsertString(DCM_SOPClassUID, UID_VideoEndoscopicImageStorage);
DcmPixelSequence* pixelSequence = new DcmPixelSequence(DcmTag(DCM_PixelData, EVR_OB));
// add the table offset
DcmPixelItem *offsetTable = new DcmPixelItem(DcmTag(DCM_Item, EVR_OB));
pixelSequence->insert(offsetTable);
// create the compressed pixel data and add it to the sequence
CustomPixelData* compressedPixelData = new CustomPixelData("existing.mpg, DcmTag(DCM_Item, EVR_OB));
pixelSequence->insert((DcmPixelItem*)compressedPixelData);
DcmPixelData *pixelData = new DcmPixelData(DCM_PixelData);
pixelData->putOriginalRepresentation(EXS_MPEG2MainProfileAtMainLevel, NULL, pixelSequence);
dataset->insert(pixelData);
char uid[100];
dcmGenerateUniqueIdentifier(uid, SITE_INSTANCE_UID_ROOT);
dataset->putAndInsertString(DCM_SOPInstanceUID, uid);
dcmGenerateUniqueIdentifier(uid, SITE_SERIES_UID_ROOT);
dataset->putAndInsertString(DCM_SeriesInstanceUID, uid);
dcmGenerateUniqueIdentifier(uid, SITE_STUDY_UID_ROOT);
dataset->putAndInsertString(DCM_StudyInstanceUID, uid);
fileFormat.saveFile(STRING_PTR_TO_CHAR(outputPtr), EXS_MPEG2MainProfileAtMainLevel, EET_UndefinedLength, EGL_recalcGL);
Any help would be appreciated. Thanks!