Delphi. Компоненты Image, OpenPictureDialog, SavePictureDialog. Рисование и сохранение графической информации
Создадим новое приложение показывающей работу вDelphi 7, позволяющее пользователю рисовать на холсте, выбирая ширину и цвет линии, и возможность сохранять результаты своей работы в файле как точечный рисунок .Рисовать будем не на всей поверхности окна(Form1.Canvas), а на холсте специально отведённого для размещения рисунка компонента Image(Image1.Canvas). Для этого запускаем нашу программу Delphi 7 и добавляем на форму следующие компоненты(см. рис.):
- 3 кнопки – Button;
- ColorDialog – диалог выбора цвета;
- SavePictureDialog – диалог сохранения рисунка;
- Image – компонент для размещеия, рисования рисунка;
- Label – компонент для надписи
- UpDown – компонент с помощью которого будем устанавливать толщину линии(находится на вкладке Win32).
События компонентов в приложении простого графического редактора:
- Form1.OnCreate;
- Image1MouseMove,Image1MouseDown;
- UpDown1: OnClick;
- Button1, Button2, Button3: OnClick.
procedure TForm1.FormCreate(Sender: TObject); begin Caption:= 'Простейший редактор графики'; Label1.Caption:= 'Толщина линии: 1'; Button1.Caption:= '&Цвет'; Button2.Caption:= '&Стереть'; Button3.Caption:= '&Сохранить'; Image1.Canvas.Brush.Color:= clWhite; // Над холстом указатель мыши имеет другую форму Image1.Cursor:=crCross; UpDown1.Min:=1; UpDown1.Max:=20; SavePictureDialog1.DefaultExt:= 'bmp'; end;
Рисование происходит при нажатии левой кнопки мыши (событие On MouseDown) точка, над которой была нажата кнопка, фиксируется, то есть назначается текущим положением пера (метод Canvas.MoveTo). После этого любое перемещение мыши (событие OnMouseMove) проводит линию от текущего положения пера до нового положения указателя мыши, и текущей позицией становится эта новая точка (метод Canvas.LineTo). Так происходит до тех пор, пока остаётся нажатой левая кнопка мыши.
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin //Протаскивание мыши при нажатой левой кнопке if (ssLeft in Shift) then //проводит линию от текущей позиции пера до точки, //над которой находится указатель мыши Image1.Canvas.LineTo(X,Y); end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // при нажатии левой кнопки мыши // текущей позицией пера становится точка. над // которой находится указатель мыши Image1.Canvas.MoveTo(X,Y); end; Компонент UpDown служит для выбора ширины пера. Выбранную ширину мы отображаем в надписи Label1: procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType); begin //Устанавливаем ширину линии, выбранную в UpDown Image1.Canvas.Pen.Width := UpDown1.Position; Label1.Caption:= 'Толщина линии:' +IntToStr(UpDown1.Position); end;
При выборе цвета ColorDialog пользователь закрывает окно нажатием кнопки OK, то скопируем значение свойства Color объекта ColorDialog1в одноимённое свойство пера:
procedure TForm1.Button1Click(Sender: TObject); begin //открываем диалог выбора цвета if ColorDialog1.Execute then Image1.Canvas.Pen.Color := ColorDialog1.Color; end; Для того чтобы стереть рисунок закрашиваем весь холст цветом фона – белым: procedure TForm1.Button2Click(Sender: TObject); begin //устанавливаем белый цвет кисти Image1.Canvas.Brush.Color:= clWhite; //закрашиваем всё окно текущим цветом Image1.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height)); end;
Процесс сохранения рисунка выполняет следующая процедура:
procedure TForm1.Button3Click(Sender: TObject); var Img:TBitmap; Region: TRect; begin if SavePictureDialog1.Execute then // выделяем память для вспомогательной переменной Img:= TBitmap.Create; try Img.Width:= Image1.Width; Img.Height:= Image1.Height; Region := Rect(0, 0, Img.Width,Img.Height); // копируем содержимое Image во вспомогательную переменную Img.Canvas.CopyRect(Region ,Image1.Canvas, Region ); // сохраняем вспомогательную переменную в файле Img.SaveToFile(SavePictureDialog1.FileName); finally // освобождаем память Img.Free; end; end; end.
И так процесс создания программы для демонстрации работы в Delphi 7 графикамы завершили. Так будет выглядеть приложение после работы с простейшим редактором графики:
На основе вышеописанного, самостоятельно создайте кнопку, которая загрузит в форму любую картинку из компьютера (соответственно за открытие картинки отвечает диалог OpenPictureDialog).
|