产品名称:医学影像和数据处理与通讯软件 型号:浩连 版本:1.0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

680 lines
26 KiB

program DfcImgz;
{$APPTYPE CONSOLE}
uses
ControlsAtomFix,
DefineTypes,
GraphicEx,
FileToImage,
Windows,
ActiveX,
Classes,
DfcImgs,
Graphics,
IniFiles,
JPEG,
msxml,
SysUtils;
var
nI, nX1Len, nVideoWidth, nVideoHeight : Integer;
gWriteYBRColor : Integer;
gPSInStr, gPPInStr : string;
gTargetDcmFile, gSourceExamFile, gSourceExamType : string;
gDeleteESFOnPE : Boolean;
//gSourceStoreFiles : TStrings;
gDcmFileInfo : TDcmFileInfo;
gDebugOutput, gDebugConvert : Boolean;
function InitP1XMLStr:string;
var
sDate, sTime, aAccNo: string;
function GetPSex:string;
begin
if Odd(Random(2)) then
Result := 'M'
else
Result := 'F';
end;
begin
Randomize;
sDate := GetRndDateStr(5);
sTime := GetRndTimeStr;
aAccNo := GetRndStr(8);
Result := '<XML>';
Result := Result + '<ODSP>';
Result := Result + '<EXEPIN DICOMType="1000">';
//Result := Result + '<Patient PatientID="!&quot;@#$^&amp;*()&lt;&gt;'':;&apos;12345" PatientName="!&quot;@#$^&amp;*()&lt;&gt;'':;&apos;12345';
//Result := Result + '" PatientSex="" PatientDOB=""></Patient>';
Result := Result + '<Patient PatientID="' + GetRndStr(8);
Result := Result + '" PatientName="' + '������';
Result := Result + '" PatientSex="' + GetPSex + '" PatientDOB="' + GetRndDateStr(100) + '"></Patient>';
Result := Result + '<Study StudyDate="' + sDate + '" StudyTime="' + sTime + '" StudyID="' + GetRndStr(8);
Result := Result + '" AccessionNumber="' + GetRndStr(8)+ '" SOPClassUID=" 1.2.840.10008.5.1.4.1.1.7"></Study>';
Result := Result + '<Series SeriesDate="' + sDate + '" SeriesTime="' + sTime + '" SeriesNumber="' + GetRndStr(8);
Result := Result + '" Modality="OP" InstitutionName="HuiMu IT Co., Ltd." ModelName="Data Convertor" Manufacturer="HM-OEIS"></Series>';
Result := Result + '<Image InstanceNumber="1" Laterality="L" ImageLaterality="B" BurnedInAnnotation="#NULL#" ';
Result := Result + 'SamplesPerPixel="1" Rows="1000" Columns="512" BitAllocated="16" BitStored="16" HighBit="15"></Image>';
Result := Result + '</EXEPIN>';
Result := Result + '</ODSP>';
Result := Result + '</XML>';
end;
function InitXMLP1Info(aXMLData: string):Boolean;
var
//tFile: TextFile;
//sXML : string;
node : IXMLDOMElement;
vXMLHelper : IXMLDOMDocument;
begin
Result := False;
nX1Len := Length(aXMLData);
WriteLogText(44, 'I', 'InitXMLP1Info ' + IntToStr(nX1Len) + ' bytes');
try
{
sXML := '';
AssignFile(tFile, 'C:\Users\User\Desktop\ImgList.xml');
Reset(tFile);
while not Eof(tFile) do
begin
Readln(tFile, sTmp);
sXML := sXML + sTmp;
end;
CloseFile(tFile);
//Showmessage(sXML);
//}
if Length(aXMLData) < 1 then
aXMLData := InitP1XMLStr;
if gDebugOutput then
WriteLogText(44, 'D', aXMLData);
vXMLHelper := CoDOMDocument.Create;
if vXMLHelper.loadXML(aXMLData) then
begin
node := IXMLDOMElement(vXMLHelper.selectSingleNode('/XML/ODSP/EXEPIN'));
if node <> nil then
begin
if node.attributes.getNamedItem('DICOMType') <> nil then
gDcmFileInfo.DICOMType := StrToIntDef(node.attributes.getNamedItem('DICOMType').Text, 0);
if node.attributes.getNamedItem('DebugConvert') <> nil then
begin
if node.attributes.getNamedItem('DebugConvert').Text = '1' then
gDebugConvert := True;
end;
end;
node := IXMLDOMElement(vXMLHelper.selectSingleNode('/XML/ODSP/EXEPIN/Patient'));
if node <> nil then
begin
if node.attributes.getNamedItem('PatientID') <> nil then
gDcmFileInfo.PatientID := Trim(node.attributes.getNamedItem('PatientID').Text);
if node.attributes.getNamedItem('PatientIssuerID') <> nil then
gDcmFileInfo.PatientIssuerID := Trim(node.attributes.getNamedItem('PatientIssuerID').Text);
if node.attributes.getNamedItem('PatientName') <> nil then
gDcmFileInfo.PatientName := Trim(node.attributes.getNamedItem('PatientName').Text);
if node.attributes.getNamedItem('PatientDOB') <> nil then
gDcmFileInfo.PatientDOB := Trim(node.attributes.getNamedItem('PatientDOB').Text);
if node.attributes.getNamedItem('PatientSex') <> nil then
gDcmFileInfo.PatientSex := Trim(node.attributes.getNamedItem('PatientSex').Text);
end;
node := IXMLDOMElement(vXMLHelper.selectSingleNode('/XML/ODSP/EXEPIN/Study'));
if node <> nil then
begin
if node.attributes.getNamedItem('AccessionNumber') <> nil then
gDcmFileInfo.AccessionNumber := Trim(node.attributes.getNamedItem('AccessionNumber').Text);
if node.attributes.getNamedItem('StudyInstanceUID') <> nil then
gDcmFileInfo.StudyInstanceUID := Trim(node.attributes.getNamedItem('StudyInstanceUID').Text);
if node.attributes.getNamedItem('StudyID') <> nil then
gDcmFileInfo.StudyID := Trim(node.attributes.getNamedItem('StudyID').Text);
if node.attributes.getNamedItem('StudyDate') <> nil then
gDcmFileInfo.StudyDate := Trim(node.attributes.getNamedItem('StudyDate').Text);
if node.attributes.getNamedItem('StudyTime') <> nil then
gDcmFileInfo.StudyTime := Trim(node.attributes.getNamedItem('StudyTime').Text);
if node.attributes.getNamedItem('StudyDescription') <> nil then
gDcmFileInfo.StudyDescription := Trim(node.attributes.getNamedItem('StudyDescription').Text);
if node.attributes.getNamedItem('ReferringPhysicianName') <> nil then
gDcmFileInfo.ReferringPhysicianName := Trim(node.attributes.getNamedItem('ReferringPhysicianName').Text);
end;
node := IXMLDOMElement(vXMLHelper.selectSingleNode('/XML/ODSP/EXEPIN/Series'));
if node <> nil then
begin
if node.attributes.getNamedItem('SeriesInstanceUID') <> nil then
gDcmFileInfo.SeriesInstanceUID := Trim(node.attributes.getNamedItem('SeriesInstanceUID').Text);
if node.attributes.getNamedItem('Modality') <> nil then
gDcmFileInfo.Modality := Trim(node.attributes.getNamedItem('Modality').Text);
if node.attributes.getNamedItem('SeriesNumber') <> nil then
gDcmFileInfo.SeriesNumber := Trim(node.attributes.getNamedItem('SeriesNumber').Text);
if node.attributes.getNamedItem('SeriesDate') <> nil then
gDcmFileInfo.SeriesDate := Trim(node.attributes.getNamedItem('SeriesDate').Text);
if node.attributes.getNamedItem('SeriesTime') <> nil then
gDcmFileInfo.SeriesTime := Trim(node.attributes.getNamedItem('SeriesTime').Text);
if node.attributes.getNamedItem('SeriesDescription') <> nil then
gDcmFileInfo.SeriesDescription := Trim(node.attributes.getNamedItem('SeriesDescription').Text);
if node.attributes.getNamedItem('InstitutionName') <> nil then
gDcmFileInfo.InstitutionName := Trim(node.attributes.getNamedItem('InstitutionName').Text);
if node.attributes.getNamedItem('Manufacturer') <> nil then
gDcmFileInfo.Manufacturer := Trim(node.attributes.getNamedItem('Manufacturer').Text);
if node.attributes.getNamedItem('ModelName') <> nil then
gDcmFileInfo.ModelName := Trim(node.attributes.getNamedItem('ModelName').Text);
if node.attributes.getNamedItem('SoftwareVersions') <> nil then
gDcmFileInfo.SoftwareVersions := Trim(node.attributes.getNamedItem('SoftwareVersions').Text);
if node.attributes.getNamedItem('CreatorVersionUID') <> nil then
gDcmFileInfo.CreatorVersionUID := Trim(node.attributes.getNamedItem('CreatorVersionUID').Text);
end;
node := IXMLDOMElement(vXMLHelper.selectSingleNode('/XML/ODSP/EXEPIN/Image'));
if node <> nil then
begin
if node.attributes.getNamedItem('SOPInstanceUID') <> nil then
gDcmFileInfo.SOPInstanceUID := Trim(node.attributes.getNamedItem('SOPInstanceUID').Text);
if node.attributes.getNamedItem('ImageDate') <> nil then
gDcmFileInfo.ImageDate := Trim(node.attributes.getNamedItem('ImageDate').Text);
if node.attributes.getNamedItem('ImageTime') <> nil then
gDcmFileInfo.ImageTime := Trim(node.attributes.getNamedItem('ImageTime').Text);
if node.attributes.getNamedItem('ImageType') <> nil then
gDcmFileInfo.ImageType := Trim(node.attributes.getNamedItem('ImageType').Text);
if node.attributes.getNamedItem('InstanceNumber') <> nil then
gDcmFileInfo.ImageNumber := StrToIntDef(node.attributes.getNamedItem('InstanceNumber').Text, 1);
if node.attributes.getNamedItem('Laterality') <> nil then
gDcmFileInfo.Laterality := Trim(node.attributes.getNamedItem('Laterality').Text);
if node.attributes.getNamedItem('ImageLaterality') <> nil then
gDcmFileInfo.ImageLaterality := Trim(node.attributes.getNamedItem('ImageLaterality').Text);
if node.attributes.getNamedItem('PdfDocTitle') <> nil then
gDcmFileInfo.PdfDocTitle := Trim(node.attributes.getNamedItem('PdfDocTitle').Text);
if node.attributes.getNamedItem('BurnedInAnnotation') <> nil then
gDcmFileInfo.BurnedInAnnotation := Trim(node.attributes.getNamedItem('BurnedInAnnotation').Text);
end;
if Trim(gDcmFileInfo.ImageDate) = '' then
gDcmFileInfo.ImageDate := gDcmFileInfo.SeriesDate;
if Trim(gDcmFileInfo.ImageTime) = '' then
gDcmFileInfo.ImageTime := gDcmFileInfo.SeriesTime;
Result := True;
WriteLogText(44, 'I', 'InitXMLP1Info done');
end
else
begin
WriteLogText(0, 'E', 'Load P1 XML string Failed');
end;
except
on e:exception do
begin
WriteLogText(0, 'W', 'Load P1 XML string with error : ' + e.Message);
end;
end;
end;
function InitXMLP2Info(aXMLData: string):Boolean;
var
sTmp, sTaskIDStr : string;
node : IXMLDOMElement;
vXMLHelper : IXMLDOMDocument;
begin
Result := False;
WriteLogText(44, 'I', 'InitXMLP2Info ' + IntToStr(Length(aXMLData)) + ' bytes');
try
if Length(aXMLData) < 1 then
Exit;
if gDebugOutput then
WriteLogText(44, 'D', aXMLData);
vXMLHelper := CoDOMDocument.Create;
if vXMLHelper.loadXML(aXMLData) then
begin
sTaskIDStr := '43210';
//<XML><ODSP><EXESIN Type="0" DeleteESFile="1" ESFileType="1010" ESFileName="D:\Document\Pictures\20190826180826.jpg" OutputFile="OutDcmFile.dcm"/></ODSP></XML>
node := IXMLDOMElement(vXMLHelper.selectSingleNode('/XML/ODSP/EXESIN'));
sTmp := Trim(node.attributes.getNamedItem('Type').Text);
if sTmp = '0' then
begin
//�Ա���ͼ���ļ�ת���ļ�
if node.attributes.getNamedItem('OutputFile') <> nil then
gTargetDcmFile := Trim(node.attributes.getNamedItem('OutputFile').Text);
if node.attributes.getNamedItem('TaskID') <> nil then
sTaskIDStr := Trim(node.attributes.getNamedItem('TaskID').Text);
if Pos('0' + IntToStr(nX1Len), sTaskIDStr) > 1 then
begin
if node.attributes.getNamedItem('ESFileName') <> nil then
gSourceExamFile := Trim(node.attributes.getNamedItem('ESFileName').Text);
if node.attributes.getNamedItem('ESFileType') <> nil then
gSourceExamType := Trim(node.attributes.getNamedItem('ESFileType').Text);
gTaskInitP1 := False;
gTaskInitP2 := True;
end
else
begin
if node.attributes.getNamedItem('ESFileName') <> nil then
gSourceExamFile := Trim(node.attributes.getNamedItem('ESFileName').Text);
if node.attributes.getNamedItem('ESFileType') <> nil then
gSourceExamType := Trim(node.attributes.getNamedItem('ESFileType').Text);
end;
if node.attributes.getNamedItem('DeleteESFile') <> nil then
begin
sTmp := UpperCase(Trim(node.attributes.getNamedItem('DeleteESFile').Text));
if (sTmp='1') or (sTmp='ON') or (sTmp='TRUE') or (sTmp='YES') then
gDeleteESFOnPE := True;
end;
end
else if sTmp = '1' then
begin
//�����ݿ���ȡת����Ϣ���ѽ��ã�
end;
Result := True;
WriteLogText(44, 'I', 'InitXMLP2Info done');
end
else
begin
WriteLogText(0, 'E', 'Load P2 XML string Failed');
end;
except
on e:exception do
begin
WriteLogText(0, 'W', 'Load P2 XML string with error : ' + e.Message);
end;
end;
end;
function ProcessImgDSP:Boolean;
var
iW, iH : Integer;
bImgLoadOK : Boolean;
bmpA : TBitmap;
jpgA : TJPEGImage;
msJPG : TMemoryStream;
sDebugInfo, sFileExt : string;
begin
Result := False;
WriteLogText(44, 'I', 'Start ProcessImgDSP');
bImgLoadOK := False;
msJPG := TMemoryStream.Create;
jpgA := TJPEGImage.Create;
WriteLogText(44, 'I', 'ESFileName = [' + gSourceExamFile + ']');
if Length(gSourceExamFile) > 0 then
begin
if FileExists(gSourceExamFile) then
begin
try
gDcmFileInfo.SourceDataAddress := 0;
gDcmFileInfo.SourceDataType := StrToIntDef(gSourceExamType, 0);
gDcmFileInfo.SourceDataSize := GetSizeFromFile(gSourceExamFile);
WriteLogText(44, 'I', 'Loading image from ESFile(' + gSourceExamFile + '), file size : ' + IntToStr(gDcmFileInfo.SourceDataSize) + ' bytes');
sFileExt := UpperCase(ExtractFileExt(ExtractFileName(gSourceExamFile)));
//if gDcmFileInfo.SOPClassUID = '1.2.840.10008.5.1.4.1.1.77.1.4.1' then
if sFileExt = '.MPG' then
begin
bImgLoadOK := True;
gDcmFileInfo.SOPClassUID := '1.2.840.10008.5.1.4.1.1.77.1.4.1';
gDcmFileInfo.TransferSyntaxUID := '1.2.840.10008.1.2.4.100';
end
else if sFileExt = '.MP4' then
begin
bImgLoadOK := True;
gDcmFileInfo.SOPClassUID := '1.2.840.10008.5.1.4.1.1.77.1.4.1';
gDcmFileInfo.TransferSyntaxUID := '1.2.840.10008.1.2.4.102';
end
else if sFileExt = '.JPG' then
begin
jpgA.LoadFromFile(gSourceExamFile);
jpgA.SaveToStream(msJPG);
bImgLoadOK := True;
end
else if (sFileExt = '.BMP') or
(sFileExt = '.PCX') or
(sFileExt = '.PNG') or
(sFileExt = '.PSD') or
(sFileExt = '.TGA') or
(sFileExt = '.TIF') then
begin
bmpA := TBitmap.Create;
try
GetImageFromFile(gSourceExamFile, bmpA);
if (bmpA.Width > 1) and (bmpA.Height > 1) then
begin
if bmpA.PixelFormat <> pf24Bit then
bmpA.PixelFormat := pf24Bit;
jpgA.Assign(bmpA);
jpgA.SaveToStream(msJPG);
bImgLoadOK := True;
end
else
begin
WriteLogText(10, 'W', 'Load GetImageFromFile(' + gSourceExamFile + ') failed');
end;
except
on e:exception do
begin
WriteLogText(0, 'E', 'Load ESFile image(' + ExtractFileExt(ExtractFileName(gSourceExamFile)) + ') error : ' + e.Message);
end;
end;
bmpA.Free;
end
else
begin
WriteLogText(10, 'E', 'Image type [' + ExtractFileExt(ExtractFileName(gSourceExamFile)) + '] not supported');
end;
except
on e:exception do
begin
WriteLogText(0, 'E', 'Load ESFile image error : ' + e.Message);
end;
end;
end
else
WriteLogText(10, 'W', 'ESFile(' + gSourceExamFile + ') not exists');
end;
if (bImgLoadOK = False) and gDebugConvert then
begin
WriteLogText(44, 'I', 'DebugConvert : Converting temp image');
bmpA := TBitmap.Create;
bmpA.Width := 512;
bmpA.Height := 512;
bmpA.PixelFormat := pf24Bit;
bmpA.Canvas.Brush.Color := clBlack;
bmpA.Canvas.Pen.Color := clRed;
bmpA.Canvas.Font.Size := 28;
bmpA.Canvas.Font.Color := clRed;
bmpA.Canvas.FillRect(Rect(0, 0, bmpA.Width, bmpA.Height));
sDebugInfo := 'DfcImgz.Debug';
iW := bmpA.Canvas.TextWidth(sDebugInfo);
iH := bmpA.Canvas.TextHeight(sDebugInfo);
bmpA.Canvas.TextOut((bmpA.Width - iW) div 2, (bmpA.Height - iH) div 2, sDebugInfo);
sDebugInfo := FormatDateTime('yyyy-MM-dd hh:nn:ss.zzz', Now);
bmpA.Canvas.Font.Size := 16;
iW := bmpA.Canvas.TextWidth(sDebugInfo);
iH := bmpA.Canvas.TextHeight(sDebugInfo);
bmpA.Canvas.TextOut((bmpA.Width - iW) div 2, (bmpA.Height - iH) div 2 + 36, sDebugInfo);
jpgA.Assign(bmpA);
jpgA.SaveToStream(msJPG);
bImgLoadOK := True;
bmpA.Free;
msJPG.SaveToFile(gAppPath + 'DCMOUT_' + FormatDateTime('yyyyMMdd_hhnnss_zzz', Now) + '.jpg');
end;
if bImgLoadOK then
begin
if gDcmFileInfo.SOPClassUID = '1.2.840.10008.5.1.4.1.1.77.1.4.1' then
begin
msJPG.LoadFromFile(gSourceExamFile);
iW := nVideoWidth;
iH := nVideoHeight;
WriteLogText(44, 'I', 'Processing video with picture size : ' + IntToStr(iW) + 'x' + IntToStr(iH) + ', data size : ' + IntToStr(msJPG.Size) + ' bytes');
end
else
begin
WriteLogText(44, 'I', 'Processing image with picture size : ' + IntToStr(jpgA.Width) + 'x' + IntToStr(jpgA.Height) + ', data size : ' + IntToStr(msJPG.Size) + ' bytes');
iW := jpgA.Width;
iH := jpgA.Height;
jpgA.Free;
end;
//gDcmFileInfo.ImageBuffAddress := 0;
//gDcmFileInfo.ImgSamplePixel := 1;
//gDcmFileInfo.ImgBitAllocated := 8;
//gDcmFileInfo.ImgBitHigh := 7;
//gDcmFileInfo.ImgWidth := 512;
//gDcmFileInfo.ImgHeight := 512;
//gDcmFileInfo.ImagePhotometricInterpretation := 'MONOCHROME2';
gDcmFileInfo.ImgSamplePixel := 3;
gDcmFileInfo.ImgBitAllocated := 8;
gDcmFileInfo.ImgBitHigh := 7;
gDcmFileInfo.ImgWidth := iW;
gDcmFileInfo.ImgHeight := iH;
if gWriteYBRColor = 1 then
gDcmFileInfo.ImagePhotometricInterpretation := 'YBR_FULL_422'
else
gDcmFileInfo.ImagePhotometricInterpretation := 'RGB';
if gDcmFileInfo.ImageNumber < 0 then
gDcmFileInfo.ImageNumber := 1;
gDcmFileInfo.AcquisitionNumber := IntToStr(gDcmFileInfo.ImageNumber);
//gDcmFileInfo.ImageWinCenter := 128;
//gDcmFileInfo.ImageWinWidth := 256;
gDcmFileInfo.ImageBuffAddress := Integer(msJPG.Memory);
gDcmFileInfo.ImageBuffSize := msJPG.Size;
gDcmFileInfo.ImageCompressed := True;
if Length(gDcmFileInfo.Modality) < 1 then
gDcmFileInfo.Modality := 'OP';
//gDcmFileInfo.StudyDescription := 'OCT Scan';
//gDcmFileInfo.SeriesDescription:= 'Scan Sequence 1';
//gDcmFileInfo.StudyID := '1001';
//gDcmFileInfo.SeriesNumber := '2001';
if Length(gDcmFileInfo.StudyDate) < 1 then
gDcmFileInfo.StudyDate := FormatDateTime('yyyyMMdd', Now);
if Length(gDcmFileInfo.SeriesDate) < 1 then
gDcmFileInfo.SeriesDate := gDcmFileInfo.StudyDate;
if Length(gDcmFileInfo.ImageDate) < 1 then
gDcmFileInfo.ImageDate := gDcmFileInfo.StudyDate;
if Length(gDcmFileInfo.StudyTime) < 1 then
gDcmFileInfo.StudyTime := FormatDateTime('hhnnss', Now);
if Length(gDcmFileInfo.SeriesTime) < 1 then
gDcmFileInfo.SeriesTime := gDcmFileInfo.StudyTime;
if Length(gDcmFileInfo.ImageTime) < 1 then
gDcmFileInfo.ImageTime := gDcmFileInfo.StudyTime;
//gDcmFileInfo.ImagePixelSpacing:= '0.000000\0.000000 ';
//if Length(gDcmFileInfo.PatientName) < 1 then
//gDcmFileInfo.PatientName := '����';
//if Length(gDcmFileInfo.PatientID) < 1 then
//gDcmFileInfo.PatientID := GetRndStr(10);
//if Length(gDcmFileInfo.PatientDOB) < 1 then
//gDcmFileInfo.PatientDOB := GetRndDateStr(100);
//if Length(gDcmFileInfo.PatientSex) < 1 then
//gDcmFileInfo.PatientSex := 'M';
if Length(gTargetDcmFile) < 1 then
begin
gTargetDcmFile := 'DCMOUT_' + FormatDateTime('yyyyMMdd_hhnnss_zzz', Now) + '.dcm';
WriteLogText(44, 'I', 'Start convert target file [' + gTargetDcmFile + ']');
if gDebugConvert then
Result := SaveDcmFile(gAppPath + gTargetDcmFile, gDcmFileInfo);
end
else
begin
WriteLogText(44, 'I', 'Start convert target file [' + StringReplace(gTargetDcmFile, '%ImageInstanceUID%', '%SOPInstanceUID%', [rfReplaceAll, rfIgnoreCase]) + ']');
if Pos('%IMAGEINSTANCEUID%', UpperCase(gTargetDcmFile)) < 1 then
begin
if FileExists(gTargetDcmFile) then
DeleteFile(gTargetDcmFile);
end;
Result := SaveDcmFile(gTargetDcmFile, gDcmFileInfo);
end;
end
else
begin
WriteLogText(10, 'W', 'JPEG image data not ready');
jpgA.Free;
end;
msJPG.Free;
WriteLogText(44, 'I', 'ProcessImgDSP done');
end;
procedure ReadConfigFile(aIniFile: string);
var
iCfg : TIniFile;
begin
iCfg := TIniFile.Create(aIniFile);
try
gLogLevel := iCfg.ReadInteger('DfcImgz', 'LogLevel', 0);
nVideoHeight := StrToIntDef(iCfg.ReadString('DfcImgz', 'VideoHeight', IntToStr(nVideoHeight)), nVideoHeight);
nVideoWidth := StrToIntDef(iCfg.ReadString('DfcImgz', 'VideoWidth', IntToStr(nVideoWidth)), nVideoWidth);
gWriteYBRColor := StrToIntDef(iCfg.ReadString('DfcImgz', 'WriteYBRColor', IntToStr(gWriteYBRColor)), gWriteYBRColor);
gDcmCharacterSet := iCfg.ReadString('DfcImgz', 'DcmCharacterSet', gDcmCharacterSet);
gDcmUIDPreFix := iCfg.ReadString('DfcImgz', 'DcmUIDPreFix', gDcmUIDPreFix);
gDcmWriteNullPIID := Str2BoolDef(iCfg.ReadString('DfcImgz', 'DcmWriteNullPIID', '1'), gDcmWriteNullPIID);
gDcmWriteSeriesDescription := Str2BoolDef(iCfg.ReadString('DfcImgz', 'DcmWriteSeriesDescription', ''), gDcmWriteSeriesDescription);
gDcmMemDump := Str2BoolDef(iCfg.ReadString('DfcImgz', 'MemDump', '0'), gDcmMemDump);
except
end;
iCfg.Free;
if gLogLevel < 0 then gLogLevel := 0;
if gLogLevel > 100 then gLogLevel := 100;
if gLogLevel = 44 then
gDebugOutput := True;
end;
begin
ExitCode := 9999;
SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOGPFAULTERRORBOX or SEM_NOOPENFILEERRORBOX);
try
CoInitialize(nil);
gPSInStr := '';
gPPInStr := '';
gLogLevel := 10;
gAppFile := ParamStr(0);
gAppPath := ExtractFilePath(gAppFile);
gAppFile := ExtractFileName(gAppFile);
gLogFile := ChangeFileExt(gAppFile, '.log');
gCfgFile := gAppPath + ChangeFileExt(gAppFile, '.ini');
gWriteYBRColor := 1;
//gSourceStoreFiles := TStringList.Create;
gDcmCharacterSet:= '';
gSourceExamFile := '';
gTargetDcmFile := '';
gDcmUIDPreFix := DICOM_UIDPRE_HEAD;
gDcmWriteSeriesDescription := True;
gDcmWriteNullPIID := True;
gTaskInitP1 := True;
gTaskInitP2 := False;
gDcmMemDump := False;
gDeleteESFOnPE := False;
gDebugOutput := False;
gDebugConvert := False;
nVideoHeight := 480;
nVideoWidth := 720;
gLogWriteMutex := CreateMutex(nil, False, 'hmDfcImgzLogwMutex');
ReleaseMutex(gLogWriteMutex);
ExitCode := 9000;
Randomize;
if FileExists(gCfgFile) then
ReadConfigFile(gCfgFile);
WriteLogText(44, 'I', '.');
WriteLogText(44, 'I', 'Application started');
WriteLogText(44, 'I', 'Application ParamCount=' + IntToStr(ParamCount));
if ParamCount > 1 then
begin
ExitCode := 8000;
//����1��ѡ����Ϣ����
//����2���ļ���Ϣ����<XML><ODSP><EXESIN Type="0" DeleteESFile="1" ESFileType="1010" ESFileName="D:\Data\SrcFile.jpg" OutputFile="D:\Data\OutFile.dcm"/></ODSP></XML>
gPPInStr := ParamStr(1);
gPSInStr := ParamStr(2);
if ParamCount > 2 then
begin
for nI := 3 to ParamCount do
begin
if (UpperCase(ParamStr(nI))='/DEBUGCONVERT') or
(UpperCase(ParamStr(nI))='-DEBUGCONVERT') then
begin
gDebugConvert := True;
WriteLogText(44, 'I', 'Application DebugConvert=True');
end
else if (UpperCase(ParamStr(nI))='/DEBUGOUTPUT') or
(UpperCase(ParamStr(nI))='-DEBUGOUTPUT') then
begin
gDebugOutput := True;
WriteLogText(44, 'I', 'Application DebugOutput=True');
end;
end;
end;
end;
ClearDcmFileInfo(gDcmFileInfo);
if Length(gPPInStr) < 30 then
InitXMLP1Info('')
else
begin
if gDebugOutput then
begin
WriteLogText(44, 'D', DecStr(gPPInStr, ''));
WriteLn(DecStr(gPPInStr, ''));
end;
InitXMLP1Info(DecStr(gPPInStr, ''));
ExitCode := 7000;
end;
if Length(gPSInStr) < 30 then
begin
if gDebugConvert then
begin
gPSInStr := '<XML><ODSP><EXESIN Type="0" DeleteESFile="0" ESFileType="1010" OutputFile="OutDcmFile.dcm" ';
gPSInStr := gPSInStr + 'ESFileName="D:\Documents\JinYuefei\Pictures\img10.jpg"/></ODSP></XML>';
//gPSInStr := '<XML><ODSP><EXESIN Type="0" DeleteESFile="0" ESFileType="1010" OutputFile="OutDcmFile.dcm" ';
//gPSInStr := gPSInStr + 'ESFileName="Z:\1234\20230112_100509_387764.tif"/></ODSP></XML>';
WriteLn(gPSInStr);
gPSInStr := EncStr(gPSInStr, '');
InitXMLP2Info(DecStr(gPSInStr, ''));
end;
end
else
begin
if gDebugOutput then
begin
WriteLogText(44, 'D', DecStr(gPSInStr, ''));
WriteLn(DecStr(gPSInStr, ''));
end;
InitXMLP2Info(DecStr(gPSInStr, ''));
ExitCode := 6000;
end;
ExitCode := 2000;
if ProcessImgDSP then
begin
ExitCode := 1000;
if gDeleteESFOnPE then
begin
if Length(gSourceExamFile) > 0 then
begin
if FileExists(gSourceExamFile) then
DeleteFile(gSourceExamFile);
end;
end;
end
else
ExitCode := 1999;
//gSourceStoreFiles.Free;
CoUnInitialize;
WriteLogText(44, 'I', '..');
except
ExitCode := 9998;
end;
//Readln;
end.