8
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
9
Spin, Buttons,nifti_img,define_types;
15
TCropEdgeForm = class(TForm)
16
ApplyBtn: TSpeedButton;
17
CropFileSzBtn: TSpeedButton;
18
CancelBtn: TSpeedButton;
27
procedure ApplyCrop2Img;
28
procedure ApplyBtnClick(Sender: TObject);
29
procedure CancelBtnClick(Sender: TObject);
30
procedure CropEditChange(Sender: TObject);
31
procedure CropFileSzBtnClick(Sender: TObject);
32
procedure FormHide(Sender: TObject);
33
procedure FormShow(Sender: TObject);
34
procedure Timer1Timer(Sender: TObject);
36
{ private declarations }
38
{ public declarations }
42
CropEdgeForm: TCropEdgeForm;
49
procedure TCropEdgeForm.ApplyBtnClick(Sender: TObject);
51
CropEdgeForm.ModalResult := mrOK;
55
procedure TCropEdgeForm.CancelBtnClick(Sender: TObject);
60
procedure TCropEdgeForm.CropEditChange(Sender: TObject);
62
if not CropEdgeForm.visible then exit;
63
Timer1.Enabled := true;
67
procedure TCropEdgeForm.CropFileSzBtnClick(Sender: TObject);
69
lV,lD,lA,lP,lL,lR: integer;
77
CropNIfTI(lL,lR,lA,lP,lD,lV);
80
procedure TCropEdgeForm.FormHide(Sender: TObject);
83
if not (CropEdgeForm.ModalResult = mrCancel) then
86
ImgForm.RefreshImagesTimer.Enabled := true;
89
procedure TCropEdgeForm.FormShow(Sender: TObject);
93
CropEdgeForm.ModalResult := mrCancel;
97
procedure TCropEdgeForm.ApplyCrop2Img;
99
lZLo,lZHi,lXLo,lXHi,lYLo,lYHi,lPos,lX,lY,lZ: integer;
103
if (gMRIcroOverlay[kBGOverlayNum].ImgBufferItems<1) then exit;
104
if (gBGImg.ScrnDim[1]*gBGImg.ScrnDim[2]*gBGImg.ScrnDim[3]) <> gMRIcroOverlay[kBGOverlayNum].ImgBufferItems then begin
105
Showmessage('Can not crop edges of a rotated image.');
108
lXlo := round(LEdit.value);
109
lXHi := gBGImg.ScrnDim[1] - round(REdit.value);
110
lYlo := round(PEdit.value);
111
lYHi := gBGImg.ScrnDim[2] - round(AEdit.value);
112
lZLo := round(VEdit.value);
113
lZHi := gBGImg.ScrnDim[3] - round(DEdit.value);
115
case gMRIcroOverlay[kBGOverlayNum].ImgBufferBPP of
117
for lZ := 1 to gBGImg.ScrnDim[3] do
118
for lY := 1 to gBGImg.ScrnDim[2] do
119
for lX := 1 to gBGImg.ScrnDim[1] do begin
121
if (lZ >= lZHi) or (lZ <= lZLo) or(lY >= lYHi) or (lY <= lYLo) or (lX >= lXHi) or (lX <= lXLo) then
122
gMRIcroOverlay[kBGOverlayNum].ImgBuffer^[lPos] := 0;
126
l16Buf := SmallIntP(gMRIcroOverlay[kBGOverlayNum].ImgBuffer );
127
for lZ := 1 to gBGImg.ScrnDim[3] do
128
for lY := 1 to gBGImg.ScrnDim[2] do
129
for lX := 1 to gBGImg.ScrnDim[1] do begin
131
if (lZ >= lZHi) or (lZ <= lZLo) or(lY >= lYHi) or (lY <= lYLo) or (lX >= lXHi) or (lX <= lXLo) then
136
l32Buf := SingleP(gMRIcroOverlay[kBGOverlayNum].ImgBuffer );
137
for lZ := 1 to gBGImg.ScrnDim[3] do
138
for lY := 1 to gBGImg.ScrnDim[2] do
139
for lX := 1 to gBGImg.ScrnDim[1] do begin
141
if (lZ >= lZHi) or (lZ <= lZLo) or(lY >= lYHi) or (lY <= lYLo) or (lX >= lXHi) or (lX <= lXLo) then
145
else begin showmessage('Unsupported data type'); end
147
ImgForm.RescaleImagesTimer.Enabled := true;
150
procedure TCropEdgeForm.ApplyCrop;
152
lZLo,lZHi,lXLo,lXHi,lYLo,lYHi,lPos,lX,lY,lZ: integer;
154
if (gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems<1) or (gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems<>gBGImg.VOIUndoVolItems) then exit;
155
if gBGImg.VOIUndoVolItems <> gMRIcroOverlay[kVOIOverlayNum].ScrnBufferItems then exit;
156
if (gBGImg.ScrnDim[1]*gBGImg.ScrnDim[2]*gBGImg.ScrnDim[3]) <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then exit;
158
//Move(gBGImg.VOIUndoVol^,gMRIcroOverlay[kVOIOverlayNum].ScrnBuffer^,gBGImg.VOIUndoVolItems);
159
FillChar(gMRIcroOverlay[kVOIOverlayNum].ScrnBuffer^,gBGImg.VOIUndoVolItems,0);
160
lXlo := round(LEdit.value);
161
lXHi := gBGImg.ScrnDim[1] - round(REdit.value);
162
lYlo := round(PEdit.value);
163
lYHi := gBGImg.ScrnDim[2] - round(AEdit.value);
164
lZLo := round(VEdit.value);
165
lZHi := gBGImg.ScrnDim[3] - round(DEdit.value);
167
for lZ := 1 to gBGImg.ScrnDim[3] do begin
168
for lY := 1 to gBGImg.ScrnDim[2] do begin
169
for lX := 1 to gBGImg.ScrnDim[1] do begin
171
if (lZ >= lZHi) or (lZ <= lZLo) or(lY >= lYHi) or (lY <= lYLo) or (lX >= lXHi) or (lX <= lXLo) then
172
gMRIcroOverlay[kVOIOverlayNum].ScrnBuffer^[lPos] := kVOI8bit;
176
//gBGImg.VOIchanged := true;
177
ImgForm.RefreshImagesTimer.enabled := true;
180
procedure TCropEdgeForm.Timer1Timer(Sender: TObject);
182
Timer1.Enabled := false;