procedure TForm1.OpenData2Click(Sender: TObject);
var
lcFileName:string;
lcWid,lcHei,lcSlice,lcDS3,lcEcho,lcExps: Integer;
lcErrorCode: LongWord;
lcExt: string;
lcFileName2: PChar;
lcWindowWid,lcWindowLevel:Integer;
lcPixeSpace: Double;
lcDataBuffer,lcRawData: PByte;
i: Integer;
lcNormalData: PSingle;
lcdata,lcData_Show:PRBDT;
FileHandle: Integer;
lcDataBuffer1,lcData_Zomm: PSingle;
begin
GL_PnlImgInfo.LoadImg[1]:= False;
GL_rad:= 0;
if dOpen1.Execute then
lcFileName:= dOpen1.FileName
else Exit;
lcExt:= ExtractFileExt(lcFileName);
GetMem(GL_RawData2,C_NumX*C_NumY*C_Slice*2*sizeof(PMRDDT));
if GL_BitMap <> nil then GL_BitMap.Destroy();
GL_BitMap:= TBitmap.Create();
m1.Clear;
if Trim(lcExt) = '.MRD' then
begin
lcErrorCode:= HRIMG_01_MRDReadDate(lcFileName,lcWid,lcHei,lcSlice,lcDS3,lcEcho,lcExps,GL_RawData2);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Data Info:');
m1.Lines.Add('Can not open data: '+ IntToStr(lcErrorCode));
GL_ErrorInfo:= 'OpenData2Click ->' + ' HRIMG_01_MRDReadDate -> ' + 'Can not open MRD data: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end
else
begin
m1.Lines.Add('Data Info:');
m1.Lines.Add('Open Data Done') ;
m1.Lines.Add('Data_Wid: ' + IntToStr(lcWid));
m1.Lines.Add('Data_Hei: ' + IntToStr(lcHei));
m1.Lines.Add('Data_Slice: ' + IntToStr(lcSlice));
GL_PnlImgInfo.LoadImg[1]:= True;
GL_Width2:= lcWid;
GL_Height2:= lcHei;
GL_Slice2:= lcSlice;
if lcSlice > 1 then
begin
ud2.Enabled:= True;
ud2.Max:= lcSlice;
end;
stat1.Panels[0].Text:= 'Open Path: ' + lcFileName;
end;
end
else
if Trim(lcExt) = '.RIIMAGE' then
begin
lcErrorCode:= HRIMG_02_RIReadDate(lcFileName,lcWid,lcHei,lcSlice,GL_RawData2);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Data Info:');
m1.Lines.Add('Can not open data: '+ IntToStr(lcErrorCode));
GL_ErrorInfo:= 'OpenData2Click ->' + ' HRIMG_02_RIReadDate -> ' + 'Can not open RIIMAGE data: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end
else
begin
m1.Lines.Add('Data Info:');
m1.Lines.Add('Open Data Done') ;
m1.Lines.Add('Data_Wid: ' + IntToStr(lcWid));
m1.Lines.Add('Data_Hei: ' + IntToStr(lcHei));
m1.Lines.Add('Data_Slice: ' + IntToStr(lcSlice));
GL_PnlImgInfo.LoadImg[1]:= True;
GL_Width2:= lcWid;
GL_Height2:= lcHei;
GL_Slice2:= lcSlice;
if lcSlice > 1 then
begin
ud2.Enabled:= True;
ud2.Max:= lcSlice;
end;
stat1.Panels[0].Text:= lcFileName;
end;
end
else
if (Trim(lcExt) = '.dcm') and (dOpen1.FilterIndex = 2) then
begin
lcFileName2:= PChar(lcFileName);
GetMem(lcDataBuffer,512*512*2*sizeof(Byte));
GetMem(lcRawData,512*512*sizeof(Byte));
lcErrorCode:= HRIMG_09_DcmRead(lcFileName2,lcWid,lcHei,lcWindowWid,lcWindowLevel,lcPixeSpace,lcDataBuffer,lcRawData);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Error: Can not Open Diocm Data');
GL_ErrorInfo:= 'OpenData2Click ->' + ' HRIMG_09_DcmRead -> ' + 'Can not open Diocm data: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
m1.Lines.Add('Data Info:');
m1.Lines.Add('Open Data Done') ;
m1.Lines.Add('Data_Wid: ' + IntToStr(lcWid));
m1.Lines.Add('Data_Hei: ' + IntToStr(lcHei));
GL_PnlImgInfo.LoadImg[1]:= True;
ud2.Enabled:= False;
ud2.Max:= 1;
edt2.Text:= '1';
stat1.Panels[0].Text:= lcFileName;
// m1.Lines.Add(IntToStr(lcRawData^));
GetMem(GL_DcmData,lcWid*lcHei*sizeof(Single));
// GetMem(GL_DcmData1,lcWid*lcHei*sizeof(Single));
GetMem(GL_DcmBuffer,img2.Width*img2.Height*sizeof(Single));
GetMem(lcNormalData,img2.Width*img2.Height*sizeof(Single));
GetMem(GL_DcmShowData,img2.Width*img2.Height*sizeof(PRBDT));
inc(lcDataBuffer);
for i:= 0 to lcWid*lcHei - 1 do
begin
GL_DcmData^:= (lcRawData^) + 256*(lcDataBuffer^);
inc(GL_DcmData);
inc(lcRawData);
inc(lcDataBuffer,2);
end;
inc(GL_DcmData,-lcWid*lcHei);
inc(lcRawData,-lcWid*lcHei);
inc(lcDataBuffer,-2*lcWid*lcHei - 1);
lcErrorCode:= HRIMG_04_ZoomData(GL_DcmData,GL_DcmBuffer,lcWid,lcHei,img2.Width,img2.Height,1);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Error: ZoomData');
GL_ErrorInfo:= 'OpenData2Click ->' + ' HRIMG_04_ZoomData -> ' + 'Zoom Data Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
//m1.Lines.Add(FloatToStr(GL_DcmBuffer^));
lcErrorCode:= HRIMG_05_Normalize(GL_DcmBuffer,lcNormalData,img2.Width*img2.Height,C_FormatSize);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Error: Normalize');
GL_ErrorInfo:= 'OpenData2Click ->' + ' HRIMG_05_Normalize -> ' + 'Normalize Data Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
// m1.Lines.Add(FloatToStr(lcNormalData^));
for i:= 0 to img2.Width*img2.Height - 1 do
begin
GL_DcmShowData^:= Round(lcNormalData^);
inc(GL_DcmShowData);
inc(lcNormalData);
end;
inc(GL_DcmShowData,-img2.Width*img2.Height);
inc(lcNormalData,-img2.Width*img2.Height);
// m1.Lines.Add(IntToStr(lcShowData^));
Test[1]:= TDataClassCreate(lcWid,lcHei,img2.Width,img2.Height,True); // 重建类的初始化
lcErrorCode:= Test[1].TData_14_SetShowBuffer(GL_DcmShowData);
if lcErrorCode <> 0 then
begin
m1.Lines.Add(IntToStr(lcErrorCode)) ;
GL_ErrorInfo:= 'OpenData2Click ->' + ' TData_14_SetShowBuffer -> ' + 'SetShow Data Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
lcErrorCode:= Test[1].TData_07_ShowImg(Test[1].TData_01_GetShowBuffer(),GL_PnlImgInfo.WindowCenter[1],GL_PnlImgInfo.WindowWidth[1],GL_BitMap,img2); // 显示图像
if lcErrorCode <> 0 then
begin
m1.Lines.Add(IntToStr(lcErrorCode));
GL_ErrorInfo:= 'OpenData2Click ->' + ' TData_07_ShowImg -> ' + 'Show Image Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
FreeMem(lcRawData);
FreeMem(lcDataBuffer);
FreeMem(GL_DcmShowData);
FreeMem(GL_DcmData);
FreeMem(GL_DcmBuffer);
FreeMem(lcNormalData);
end
else
if (Trim(lcExt) = '.dcm') and (dOpen1.FilterIndex = 1) then
begin
lcFileName2:= PChar(lcFileName);
GetMem(lcDataBuffer,512*512*2*sizeof(Byte));
GetMem(lcRawData,512*512*sizeof(Byte));
// lcErrorCode:= HRIMG_09_DcmRead(lcFileName2,lcWid,lcHei,lcWindowWid,lcWindowLevel,lcPixeSpace,lcDataBuffer,lcRawData);
lcErrorCode:= DcmRead(lcFileName,lcWid,lcHei,lcRawData);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Error: Can not Open Diocm Data');
GL_ErrorInfo:= 'OpenData2Click ->' + ' DcmRead -> ' + 'Can not Open HRDiocm Data: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
m1.Lines.Add('Data Info:');
m1.Lines.Add('Open Data Done') ;
m1.Lines.Add('Data_Wid: ' + IntToStr(lcWid));
m1.Lines.Add('Data_Hei: ' + IntToStr(lcHei));
GL_PnlImgInfo.LoadImg[1]:= True;
ud1.Enabled:= False;
ud1.Max:= 1;
edt1.Text:= '1';
stat1.Panels[0].Text:= lcFileName;
// m1.Lines.Add(IntToStr(lcRawData^));
GetMem(GL_DcmData,lcWid*lcHei*sizeof(Single));
// GetMem(GL_DcmData1,lcWid*lcHei*sizeof(Single));
GetMem(GL_DcmBuffer,img2.Width*img2.Height*sizeof(Single));
GetMem(lcNormalData,img2.Width*img2.Height*sizeof(Single));
GetMem(GL_DcmShowData,img2.Width*img2.Height*sizeof(PRBDT));
// inc(lcDataBuffer);
for i:= 0 to lcWid*lcHei - 1 do
begin
// GL_DcmData^:= (lcRawData^) + 256*(lcDataBuffer^);
GL_DcmData^:= (lcRawData^);
inc(GL_DcmData);
inc(lcRawData);
// inc(lcDataBuffer,2);
end;
inc(GL_DcmData,-lcWid*lcHei);
inc(lcRawData,-lcWid*lcHei);
// inc(lcDataBuffer,-2*lcWid*lcHei - 1);
lcErrorCode:= HRIMG_04_ZoomData(GL_DcmData,GL_DcmBuffer,lcWid,lcHei,img2.Width,img2.Height,1);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Error: ZoomData');
GL_ErrorInfo:= 'OpenData2Click ->' + ' HRIMG_04_ZoomData -> ' + 'Zoom Data Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
//m1.Lines.Add(FloatToStr(GL_DcmBuffer^));
lcErrorCode:= HRIMG_05_Normalize(GL_DcmBuffer,lcNormalData,img2.Width*img2.Height,C_FormatSize);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Error: Normalize');
GL_ErrorInfo:= 'OpenData2Click ->' + ' HRIMG_05_Normalize -> ' + 'Normalize Data Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
// m1.Lines.Add(FloatToStr(lcNormalData^));
for i:= 0 to img2.Width*img2.Height - 1 do
begin
GL_DcmShowData^:= Round(lcNormalData^);
inc(GL_DcmShowData);
inc(lcNormalData);
end;
inc(GL_DcmShowData,-img2.Width*img2.Height);
inc(lcNormalData,-img2.Width*img2.Height);
// m1.Lines.Add(IntToStr(lcShowData^));
Test[1]:= TDataClassCreate(lcWid,lcHei,img2.Width,img2.Height,True); // 重建类的初始化
lcErrorCode:= Test[1].TData_14_SetShowBuffer(GL_DcmShowData);
if lcErrorCode <> 0 then
begin
m1.Lines.Add(IntToStr(lcErrorCode)) ;
GL_ErrorInfo:= 'OpenData2Click ->' + ' TData_14_SetShowBuffer -> ' + 'SetShow Data Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
lcErrorCode:= Test[1].TData_07_ShowImg(Test[1].TData_01_GetShowBuffer(),GL_PnlImgInfo.WindowCenter[1],GL_PnlImgInfo.WindowWidth[1],GL_BitMap,img2); // 显示图像
if lcErrorCode <> 0 then
begin
m1.Lines.Add(IntToStr(lcErrorCode));
GL_ErrorInfo:= 'OpenData2Click ->' + ' TData_07_ShowImg -> ' + 'Show Image Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
//ccx 20240314 增加窗宽窗位
(*img1.Repaint;
lcStr:= Format('WW: %d',[GL_PnlImgInfo.WindowWidth[0]]);
Img1.Canvas.TextOut(180, 220, lcStr);
lcStr:= Format('WL: %d',[GL_PnlImgInfo.WindowCenter[0]]);
Img1.Canvas.TextOut(180, 240, lcStr);*)
stat1.Panels[1].Text:= Format(' WW %d , WL %d',[GL_PnlImgInfo.WindowWidth[1],GL_PnlImgInfo.WindowCenter[1]]);
//ccx 20240314 增加窗宽窗位
FreeMem(lcRawData);
FreeMem(lcDataBuffer);
FreeMem(GL_DcmShowData);
FreeMem(GL_DcmData);
FreeMem(GL_DcmBuffer);
FreeMem(lcNormalData);
end
else
if (Trim(lcExt) = '.Rdat') then
begin
FileHandle:= FileOpen(lcFileName,fmOpenRead);
if FileHandle < 0 then
begin
ShowMessage('Open File Failed!');
GL_ErrorInfo:= 'OpenData2Click ->' + ' FileOpen -> ' + 'Open Rdat File Failed: ';
WriteLog(GL_ErrorInfo,FileHandle);
Exit;
end;
// m1.Lines.Add(lcFileName);
try
FileSeek(FileHandle,0,0);
FileRead(FileHandle,lcWid,SizeOf(lcWid));
FileRead(FileHandle,lcHei,SizeOf(lcHei));
GetMem(lcDataBuffer1,lcWid*lcHei*Sizeof(Single));
FileRead(FileHandle,lcDataBuffer1^,lcWid*lcHei*Sizeof(Single));
FileClose(FileHandle);
m1.Lines.Add('Data Info:');
m1.Lines.Add('Open Data Done') ;
m1.Lines.Add('Data_Wid: ' + IntToStr(lcWid));
m1.Lines.Add('Data_Hei: ' + IntToStr(lcHei));
GL_PnlImgInfo.LoadImg[1]:= True;
ud2.Enabled:= False;
ud2.Max:= 1;
edt2.Text:= '1';
stat1.Panels[0].Text:= lcFileName;
GetMem(lcData_Zomm,img2.Width*img2.Height*sizeof(Single));
GetMem(lcData_Show,img2.Width*img2.Height*sizeof(PRBDT));
GetMem(lcNormalData,img2.Width*img2.Height*sizeof(Single));
{ lcErrorCode:= HRIMG_04_ZoomData(lcDataBuffer1,lcData_Zomm,lcWid,lcHei,img2.Width,img2.Height,1);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Error: ZoomData');
Exit;
end;
//m1.Lines.Add(FloatToStr(GL_DcmBuffer^));
lcErrorCode:= HRIMG_05_Normalize(lcData_Zomm,lcNormalData,img2.Width*img2.Height,C_FormatSize);
if lcErrorCode <> 0 then
begin
m1.Lines.Add('Error: Normalize');
Exit;
end; }
for i:= 0 to img1.Width*img1.Height - 1 do
begin
lcData_Show^:= Round(lcDataBuffer1^);
inc(lcData_Show);
inc(lcDataBuffer1);
end;
inc(lcData_Show,-img2.Width*img2.Height);
inc(lcDataBuffer1,-img2.Width*img2.Height);
// m1.Lines.Add(IntToStr(lcShowData^));
Test[1]:= TDataClassCreate(lcWid,lcHei,img2.Width,img2.Height,True); // 重建类的初始化
lcErrorCode:= Test[1].TData_14_SetShowBuffer(lcData_Show);
if lcErrorCode <> 0 then
begin
m1.Lines.Add(IntToStr(lcErrorCode)) ;
GL_ErrorInfo:= 'OpenData2Click ->' + ' TData_14_SetShowBuffer -> ' + 'SetShow Data Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
lcErrorCode:= Test[1].TData_07_ShowImg(Test[1].TData_01_GetShowBuffer(),GL_PnlImgInfo.WindowCenter[1],GL_PnlImgInfo.WindowWidth[1],GL_BitMap,img2); // 显示图像
if lcErrorCode <> 0 then
begin
m1.Lines.Add(IntToStr(lcErrorCode));
GL_ErrorInfo:= 'OpenData2Click ->' + ' TData_07_ShowImg -> ' + 'Show Image Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
FreeMem(lcDataBuffer1);
FreeMem(lcData_Show);
FreeMem(lcData_Zomm);
FreeMem(lcNormalData);
except
ShowMessage('Open Image Failed !');
GL_ErrorInfo:= 'OpenData2Click ->' + ' Nil -> ' + 'Open Image Failed: ';
WriteLog(GL_ErrorInfo,03);
Exit;
end;
end
else
begin
ShowMessage('Data Type Error');
GL_ErrorInfo:= 'OpenData2Click ->' + ' Nil -> ' + 'Data Type Error: ';
WriteLog(GL_ErrorInfo,04);
Exit;
end;
if (Trim(lcExt) = '.MRD') or (Trim(lcExt) = '.RIIMAGE') then
begin
GetMem(GL_SinleSlice_Data,lcWid*lcHei*2*sizeof(PMRDDT));
CopyMemory(GL_SinleSlice_Data,GL_RawData2,lcWid*lcHei*2*sizeof(PMRDDT)); // 拷贝一层的数据
Test[1]:= TDataClassCreate(lcWid,lcHei,img2.Width,img2.Height,True); // 重建类的初始化
Test[1].TData_03_SetMRDBuffer(GL_SinleSlice_Data); // 数据传递
Test[1].TData_09_Build(); // 数据重建
lcErrorCode:= Test[1].TData_07_ShowImg(Test[1].TData_01_GetShowBuffer(),GL_PnlImgInfo.WindowCenter[1],GL_PnlImgInfo.WindowWidth[1],GL_BitMap,img2); // 显示图像
if lcErrorCode <> 0 then
begin
m1.Lines.Add(IntToStr(lcErrorCode));
GL_ErrorInfo:= 'OpenData2Click ->' + ' TData_07_ShowImg -> ' + 'Show Image Failed: ';
WriteLog(GL_ErrorInfo,lcErrorCode);
Exit;
end;
//FreeMem(GL_RawData,C_NumX*C_NumY*C_Slice*2*sizeof(PMRDDT)); // 释放内存
FreeMem(GL_SinleSlice_Data,lcWid*lcHei*2*sizeof(PMRDDT));
end;
end;
逐行解释代码
最新发布