Утилита генерации маски изображения

Опубликовал – 18.06.2010

Здравствуйте, дорогие друзья. Так как мы применяем маску для картинок, в нашей с вами разработке игры, я решил поделиться легким решением генерации.

Давайте создадим новый проект с именем MaskGenerator, таким способом, как я рассказывал во второй главе.

Теперь на нашу форму добавим несколько компонентов, у меня это выглядит так:

Более подробно можно будет посмотреть в прилагающихся исходниках.
Теперь, давайте опишем саму генерацию. Алгоритм очень простой. Если в нашем рисунке встречается черный цвет, он будет меняться на белый, все остальные цвета будут черными.

unit main;

interface

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

type
  TfrmMain = class(TForm)
    Panel: TPanel;
    GroupBox: TGroupBox;
    FileListBox: TFileListBox;
    DirectoryListBox: TDirectoryListBox;
    DriveComboBox: TDriveComboBox;
    Button: TButton;
    GroupBoxAfter: TGroupBox;
    GroupBoxBefore: TGroupBox;
    ImageBefore: TImage;
    ImageAfter: TImage;
    SaveDialog: TSaveDialog;
    procedure FileListBoxChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
  private
    { Private declarations }
    FileName: string;
    Mask: TBitmap;
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.FileListBoxChange(Sender: TObject);
var
  i, j: Integer;
begin
  FileName := FileListBox.FileName; //имя выбранного файла
  Button.Enabled := false;
  if (not FileExists(FileName)) then exit; //если нет имени выходим

  ImageBefore.Picture.LoadFromFile(FileName); //загружаем оригинал и показываем

  Mask.Width := ImageBefore.Picture.Width; //подготавливаем размеры маски
  Mask.Height := ImageBefore.Picture.Height;

  //проходимся по каждому пикселю и заполняем маску
  for i := 0 to pred(Mask.Width) do
    for j := 0 to pred(Mask.Height) do
      if (ImageBefore.Canvas.Pixels[i,j] = 0) then
        Mask.Canvas.Pixels[i,j] := $FFFFFF
      else
        Mask.Canvas.Pixels[i,j] := 0;

  //показываем маску на экране
  ImageAfter.Picture.Assign(Mask);

  Button.Enabled := true;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Mask := TBitmap.Create();
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  Mask.Free();
end;

procedure TfrmMain.ButtonClick(Sender: TObject);
var
  SaveFileName: string;
begin
  //сохраняем маску в файл
  SaveDialog.InitialDir := Application.ExeName;
  if SaveDialog.Execute then SaveFileName := SaveDialog.FileName;
  if not FileExists(SaveFileName) then SaveFileName := SaveFileName + '.bmp';
  Mask.SaveToFile(SaveFileName);
end;

Вот что у нас получилось:

Исходные коды к данной статье MaskGenerator

Рассказать друзьям:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • Яндекс.Закладки
  • В Живую Ленту Google
  • Сто закладок
Нет комментариев - Утилита генерации маски изображения

Ответ

Ответить

Comments

Перед отправкой формы: