⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 previews.pas

📁 ·ImageEn 2.3.0 ImageEn一组用于图像处理、查看和分析的Delphi控件。能够保存几种图像格式
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  end;
  // Gamma Correction
  if PageControl1.ActivePage = TabGamma then
  begin
    gamChannels := [];
    if cbxGamma.checked[0] then
      gamChannels := gamChannels + [iecRed];
    if cbxGamma.checked[1] then
      gamChannels := gamChannels + [iecGreen];
    if cbxGamma.checked[2] then
      gamChannels := gamChannels + [iecBlue];
    im.Proc.GammaCorrect(trkGamma.position / 10, gamChannels);
  end;
  // Sharpen
  if PageControl1.ActivePage = TabSheet14 then
  begin
    _Sharpen(im.IEBitmap, 0, 0, im.IEBitmap.Width, im.IEBitmap.Height, Sharpen, SharpenSize, v1, v2);
  end;
  //
  UpdatePreviewZoom;
end;

procedure TfPreviews.UpdatePreviewZoom;
begin
  // pages that disables the zoom
  case PageControl1.ActivePage.tag of
    1, 2, 3, 4, 5, 6, 10, 13, 14:
      ImageEn1.MouseInteract := ImageEn1.MouseInteract + [miZoom];
  else
    begin
      ImageEn1.MouseInteract := ImageEn1.MouseInteract - [miZoom];
      ImageEn1.Fit;
    end;
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////
// Copia zona originale in elaborata e applica l'effetto corrente

procedure TfPreviews.CopyOrg;
var
  //tmpbitmap: TBitmap;
  //iebmp: TIEBitmap;
  ie:TImageEnView;
  newwidth, newheight: integer;
  xDst, yDst, dxDst, dyDst: integer;
  xSrc, ySrc, dxSrc, dySrc: integer;
begin
  ImageEn2.LockPaint;

  (*
  imageen2.IEBitmap.Width := imageen1.ExtentX;
  imageen2.IEbitmap.Height := imageen1.ExtentY;
  imageen1.DrawTo(imageen2.bitmap.canvas);
  //*)

  //(*
  imageen2.IEBitmap.Width := imageen1.ExtentX;
  imageen2.IEbitmap.Height := imageen1.ExtentY;
  imageen1.GetRenderRectangles(xDst, yDst, dxDst, dyDst, xSrc, ySrc, dxSrc, dySrc);
  imageen1.IEBitmap.StretchRectTo( imageen2.iebitmap, 0,0,imageen2.iebitmap.width,imageen2.iebitmap.height, xSrc,ySrc,dxSrc,dySrc,rfNone,255 );
  imageen2.iebitmap.AlphaChannel.full:=imageen1.iebitmap.alphachannel.full;
  imageen2.Update;
  //*)

  imageen2.Proc.SaveUndo(ieuImage);

  // FFT
  (*
  if not assigned(FTImage) then
  begin
    FTImage := TIEFtImage.Create;
    FTImage.OnProgress := ImageEnProc2.OnProgress;
  end;
  if imageen1.IEBitmap.Width > imageen1.IEBitmap.Height then
  begin
    newwidth := 128;
    NewHeight := (imageen1.IEBitmap.Height * NewWidth) div imageen1.IEBitmap.Width;
  end
  else
  begin
    newheight := 128;
    NewWidth := (imageen1.IEBitmap.Width * NewHeight) div imageen1.IEBitmap.Height;
  end;
  tmpbitmap := tbitmap.create;
  tmpbitmap.pixelformat := pf24bit;
  tmpbitmap.width := newwidth;
  tmpbitmap.height := newheight;
  SetStretchBltMode(tmpbitmap.canvas.handle, HALFTONE);
  SetBrushOrgEx(tmpbitmap.canvas.handle, 0, 0, nil);
  tmpbitmap.Canvas.StretchDraw(rect(0, 0, newwidth, newheight), ImageEn1.bitmap);
  FFTProgressPos := 0;
  iebmp := TIEBitmap.Create;
  iebmp.EncapsulateTBitmap(tmpBitmap, true);
  if checkbox1.checked then
    FTImage.BuildFT(iebmp, ieitGRAYSCALE)
  else
    FTImage.BuildFT(iebmp, ieitRGB);
  FreeAndNil(iebmp);
  FreeAndNil(tmpbitmap);
  ProgressBar1.Position := 0;
  *)
  if not assigned(FTImage) then
  begin
    FTImage := TIEFtImage.Create;
    FTImage.OnProgress := ImageEnProc2.OnProgress;
  end;
  if imageen1.IEBitmap.Width > imageen1.IEBitmap.Height then
  begin
    newwidth := 128;
    NewHeight := (imageen1.IEBitmap.Height * NewWidth) div imageen1.IEBitmap.Width;
  end
  else
  begin
    newheight := 128;
    NewWidth := (imageen1.IEBitmap.Width * NewHeight) div imageen1.IEBitmap.Height;
  end;
  ie:=TImageEnView.Create(nil);
  ie.LegacyBitmap:=False;
  ImageEn1.Proc.ResampleTo(ie.IEBitmap,newwidth,newheight,rfTriangle);
  FFTProgressPos := 0;
  if checkbox1.checked then
    FTImage.BuildFT(ie.IEBitmap, ieitGRAYSCALE)
  else
    FTImage.BuildFT(ie.IEBitmap, ieitRGB);
  ProgressBar1.Position := 0;
  ie.free;

  //
  ApplyAct(imageen2);
  ImageEn2.UnLockPaint;
  if PageControl1.ActivePage = TabSheet6 then
    HistogramBox1.Update;
end;

/////////////////////////////////////////////////////////////////////////////////////
// Copia immagine modificata in originale (applica effetto corrente a imageen1)

procedure TfPreviews.CopyModToOrg;
begin
  ApplyAct(imageen1);
  imageen1.update;
  imageen1.paint; // <- needed
  CopyOrg;
end;

/////////////////////////////////////////////////////////////////////////////////////
// variazione HSL (trackbars 2/3/5)

procedure TfPreviews.TrackBar2Change(Sender: TObject);
begin
  if not dochange then
    exit;
  if (Hue <> trackbar2.position) or (Sat <> trackbar3.position) or (Lum <> trackbar5.position) then
  begin
    Hue := trackbar2.position;
    Sat := trackbar3.position;
    Lum := trackbar5.position;
    edit4.text := inttostr(Hue);
    edit2.text := inttostr(Sat);
    edit3.text := inttostr(Lum);
    if chkLockPreview.checked then
    begin
      imageen2.Proc.undo;
      ApplyAct(imageen2);
      imageen2.paint;
    end;
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////
// variazione HSL (edits 4/2/3)

procedure TfPreviews.Edit4Change(Sender: TObject);
var
  h, s, l: integer;
begin
  if not dochange then
    exit;
  h := strtointdef(edit4.text, 0);
  s := strtointdef(edit2.text, 0);
  l := strtointdef(edit3.text, 0);
  if (Hue <> h) or (Sat <> s) or (Lum <> l) then
  begin
    trackbar2.position := h;
    trackbar3.position := s;
    trackbar5.position := l;
    trackbar2change(self);
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////
// cambia tipo effetto (pagecontrol1)

procedure TfPreviews.PageControl1Change(Sender: TObject);
begin
  ResetParameters(false);
  UpdatePreviewZoom;
  CopyOrg;
end;

/////////////////////////////////////////////////////////////////////////////////////
// Copia immagine modificata in originale (applica effetto corrente a imageen1)

procedure TfPreviews.Button6Click(Sender: TObject);
begin
  CopyModToOrg;
  ResetParameters(true);
  CopyOrg;
  UndoCaption:=UndoCaption+undos[PageControl1.ActivePage.tag-1]+',';
end;

/////////////////////////////////////////////////////////////////////////////////////
// cambia zoom/view di imageen1 (immagine originale)

procedure TfPreviews.ImageEn1ViewChange(Sender: TObject; Change: Integer);
begin
  //	if (Change=0) and imageen1.MouseCapture then
  //   	exit;	// movimento in corso
  CopyOrg;
end;

/////////////////////////////////////////////////////////////////////////////////////
// variazione RGB (trackbars6/7/8)

procedure TfPreviews.TrackBar6Change(Sender: TObject);
begin
  if not dochange then
    exit;
  if (red <> trackbar6.position) or (green <> trackbar7.position) or (blue <> trackbar8.position) then
  begin
    red := trackbar6.position;
    green := trackbar7.position;
    blue := trackbar8.position;
    edit7.text := inttostr(red);
    edit6.text := inttostr(green);
    edit5.text := inttostr(blue);
    if chkLockPreview.checked then
    begin
      imageen2.Proc.undo;
      ApplyAct(imageen2);
      imageen2.paint;
    end;
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////
// variazione RGB (edit7-6-5)

procedure TfPreviews.Edit7Change(Sender: TObject);
var
  rr, gg, bb: integer;
begin
  if not dochange then
    exit;
  rr := strtointdef(edit7.text, 0);
  gg := strtointdef(edit6.text, 0);
  bb := strtointdef(edit5.text, 0);
  if (red <> rr) or (green <> gg) or (blue <> bb) then
  begin
    trackbar6.position := rr;
    trackbar7.position := gg;
    trackbar8.position := bb;
    trackbar6change(self);
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////
// variazione valori filtro (edit8...16)

procedure TfPreviews.Edit8Change(Sender: TObject);
begin
  if domod then
  begin
    filter.Divisor := strtointdef(edit20.text, 1);
    with TEdit(sender) do
      filter.Values[(tag div 3), tag - (tag div 3) * 3] := strtointdef(text, 0);
    if chkLockPreview.checked then
    begin
      imageen2.Proc.undo;
      ApplyAct(imageen2);
      imageen2.paint;
    end;
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////
// Selezione valore nel list box - valori presettati filtri

procedure TfPreviews.ListBox1Click(Sender: TObject);
begin
  if not dochange then
    exit;
  filter := IEGetFilter( listbox1.itemindex )^;
  LoadFilt;
  if chkLockPreview.checked then
  begin
    imageen2.Proc.undo;
    ApplyAct(imageen2);
    imageen2.paint;
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////

procedure TfPreviews.LoadFilt;
begin
  domod := false;
  edit8.text := inttostr(filter.Values[0, 0]);
  edit9.text := inttostr(filter.Values[1, 0]);
  edit10.text := inttostr(filter.Values[2, 0]);
  edit11.text := inttostr(filter.Values[0, 1]);
  edit12.text := inttostr(filter.Values[1, 1]);
  edit13.text := inttostr(filter.Values[2, 1]);
  edit14.text := inttostr(filter.Values[0, 2]);
  edit15.text := inttostr(filter.Values[1, 2]);
  edit16.text := inttostr(filter.Values[2, 2]);
  edit20.text := inttostr(filter.divisor);
  domod := true;
end;

/////////////////////////////////////////////////////////////////////////////////////
// Rende effettivo l'effetto corrente e chiude (implicito)

procedure TfPreviews.Button1Click(Sender: TObject);
begin
  DoProgress := true;
  ApplyAct(imageen1);
  imageen1.update;
  UndoCaption:=UndoCaption+undos[PageControl1.ActivePage.tag-1];
  GetIPParams;
  DefaultLockPreview:=chkLockPreview.checked;
end;

/////////////////////////////////////////////////////////////////////////////////////
// load filter

procedure TfPreviews.Button4Click(Sender: TObject);
begin
  if OpenDialog1.execute then
  begin
    filter := LoadFilterFromFile(OpenDialog1.filename);
    LoadFilt;
    if chkLockPreview.checked then
    begin
      imageen2.Proc.undo;
      ApplyAct(imageen2);
      imageen2.paint;
    end;
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////
// save filter

procedure TfPreviews.Button5Click(Sender: TObject);
begin
  if SaveDialog1.execute then
    SaveFilterToFile(SaveDialog1.filename, Filter);
end;

/////////////////////////////////////////////////////////////////////////////////////
// Channels

procedure TfPreviews.CheckListBox1Click(Sender: TObject);
begin
  if not dochange then
    exit;
  HistogramBox1.HistogramKind := [];
  if CheckListBox1.Checked[0] then
    HistogramBox1.HistogramKind := HistogramBox1.HistogramKind + [hkRed];
  if CheckListBox1.Checked[1] then
    HistogramBox1.HistogramKind := HistogramBox1.HistogramKind + [hkGreen];
  if CheckListBox1.Checked[2] then
    HistogramBox1.HistogramKind := HistogramBox1.HistogramKind + [hkBlue];
  if CheckListBox1.Checked[3] then
    HistogramBox1.HistogramKind := HistogramBox1.HistogramKind + [hkGray];
  RulerBox1.Left := HistogramBox1.HistogramXPos;
  RulerBox1.Width := HistogramBox1.Width - RulerBox1.Left;
end;

/////////////////////////////////////////////////////////////////////////////////////
// Cambia posizione RulerBox1

procedure TfPreviews.RulerBox1RulerPosChange(Sender: TObject;
  Grip: Integer);
begin
  if not dochange then
    exit;
  // Aggiorna labels
  if RulerBox1.GripsPos[0] > RulerBox1.GripsPos[1] then
    if Grip = 0 then
      RulerBox1[1] := RulerBox1[0]
    else
      RulerBox1[0] := RulerBox1[1];
  if Grip = 0 then
    Label16.Caption := inttostr(trunc(RulerBox1.GripsPos[0]))
  else if Grip = 1 then
    Label17.Caption := inttostr(trunc(RulerBox1.GripsPos[1]));
  //
  if (CheckListBox1.Checked[0]) or (CheckListBox1.Checked[3]) then
  begin
    // RED
    DownLimit.r := trunc(RulerBox1.GripsPos[0]);
    UpLimit.r := trunc(RulerBox1.GripsPos[1]);
  end;
  if (CheckListBox1.Checked[1]) or (CheckListBox1.Checked[3]) then
  begin
    // GREEN
    DownLimit.g := trunc(RulerBox1.GripsPos[0]);
    UpLimit.g := trunc(RulerBox1.GripsPos[1]);
  end;
  if (CheckListBox1.Checked[2]) or (CheckListBox1.Checked[3]) then
  begin
    // BLUE
    DownLimit.b := trunc(RulerBox1.GripsPos[0]);
    UpLimit.b := trunc(RulerBox1.GripsPos[1]);
  end;
  if chkLockPreview.checked then

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -