Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменить режим копирования изображения

Delphi , Графика и Игры , Графика

Изменить режим копирования изображения

Автор: Xavier Pacheco

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

unit MainFrm;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type

  TMainForm = class(TForm)
    imgCopyTo: TImage;
    imgCopyFrom: TImage;
    cbCopyMode: TComboBox;
    btnDrawImages: TButton;
    btnCopy: TButton;
    procedure FormShow(Sender: TObject);
    procedure btnCopyClick(Sender: TObject);
    procedure btnDrawImagesClick(Sender: TObject);
  private
    procedure DrawImages;
    procedure GetCanvasRect(AImage: TImage; var ARect: TRect);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.GetCanvasRect(AImage: TImage; var ARect: TRect);
var
  R: TRect;
  R2: TRect;
begin
  R := AImage.Canvas.ClipRect;
  with AImage do
  begin
    ARect.TopLeft := Point(0, 0);
    ARect.BottomRight := Point(Width, Height);
  end;
  R2 := ARect;
  ARect := R2;
end;

procedure TMainForm.DrawImages;
var
  R: TRect;
begin
  // Draw an ellipse in img1
  with imgCopyTo.Canvas do
  begin
    Brush.Style := bsSolid;
    Brush.Color := clWhite;
    GetCanvasRect(imgCopyTo, R);
    FillRect(R);
    Brush.Color := clRed;
    Ellipse(10, 10, 100, 100);
  end;

  // Draw an ellipse in img2
  with imgCopyFrom.Canvas do
  begin
    Brush.Style := bsSolid;
    Brush.Color := clWhite;
    GetCanvasRect(imgCopyFrom, R);
    FillRect(R);
    Brush.Color := clBlue;
    Ellipse(30, 30, 120, 120);
  end;

end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  // Initialize the combobox to the first item
  cbCopyMode.ItemIndex := 0;
  DrawImages;
end;

procedure TMainForm.btnCopyClick(Sender: TObject);
var
  cm: Longint;
  CopyToRect,
    CopyFromRect: TRect;
begin
  // Determine the copy mode based on the combo box selection
  case cbCopyMode.ItemIndex of
    0: cm := cmBlackNess;
    1: cm := cmDstInvert;
    2: cm := cmMergeCopy;
    3: cm := cmMergePaint;
    4: cm := cmNotSrcCopy;
    5: cm := cmNotSrcErase;
    6: cm := cmPatCopy;
    7: cm := cmPatInvert;
    8: cm := cmPatPaint;
    9: cm := cmSrcAnd;
    10: cm := cmSrcCopy;
    11: cm := cmSrcErase;
    12: cm := cmSrcInvert;
    13: cm := cmSrcPaint;
    14: cm := cmWhiteness;
  else
    cm := cmSrcCopy;
  end;

  // Assign the selected copymode to Image1's CopyMode property.
  imgCopyTo.Canvas.CopyMode := cm;

  GetCanvasRect(imgCopyTo, CopyToRect);
  GetCanvasRect(imgCopyFrom, CopyFromRect);

  // Now copy Image2 onto Image1 using Image1's CopyMode setting
  imgCopyTo.Canvas.CopyRect(CopyToRect, imgCopyFrom.Canvas, CopyFromRect);
end;

procedure TMainForm.btnDrawImagesClick(Sender: TObject);
begin
  DrawImages;
end;

end.

Перевод на русский язык:

Данный код является примером приложения Delphi, которое позволяет пользователю скопировать одну картинку на другую с помощью различных режимов копирования. Режим копирования определяет, как должна быть изменена целевая картинка в процессе копирования.

Вот разбивка кода:

  • Единица MainForm содержит форму с двумя картинками (imgCopyTo и imgCopyFrom), комбо-боксом (cbCopyMode) для выбора режима копирования и двумя кнопками (btnDrawImages и btnCopy) для рисования и копирования картинок.
  • Процедура GetCanvasRect получает прямоугольник канваса для картинки и устанавливает его как параметр ARect.
  • Процедура DrawImages рисует эллипсы на обеих картинках с помощью различных цветов кисти.
  • Процедура FormShow вызывается, когда форма отображается. Она инициализирует комбо-бокс для первого элемента и вызывает DrawImages.
  • Процедура btnCopyClick определяет режим копирования на основе выбранного элемента в комбо-боксе, устанавливает свойство CopyMode канваса картинки imgCopyTo, получает прямоугольники для обеих картинок и копирует imgCopyFrom на imgCopyTo с использованием указанного режима копирования.
  • Процедура btnDrawImagesClick вызывает DrawImages.

Доступные режимы копирования: 1. cmBlackness 2. cmDstInvert 3. cmMergeCopy 4. cmMergePaint 5. cmNotSrcCopy 6. cmNotSrcErase 7. cmPatCopy 8. cmPatInvert 9. cmPatPaint 10. cmSrcAnd 11. cmSrcCopy 12. cmSrcErase 13. cmSrcInvert 14. cmSrcPaint 15. cmWhiteness

Чтобы изменить режим копирования, пользователь может просто выбрать другой элемент в комбо-боксе перед нажатием кнопки "Копировать".

В улучшенной версии кода я добавил вызов DrawImages в процедуре btnCopyClick после копирования картинок. Это обеспечивает обновление нарисованных эллипсов, чтобы отражать любые изменения, сделанные операцией копирования.

Также я добавил строку кода на начало процедуры DrawImages, чтобы очистить канвас перед рисованием эллипсов. Это предотвращает рисование ранее нарисованных эллипсов поверх новых, что обеспечивает более чистый и точный отображение скопированных картинок.

Изменение режима копирования изображения с помощью комбо-бокса и кнопки копирования в приложении на Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Графика ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 14:22:34/0.0057141780853271/1