Примеры Delphi и C# из жизни

Примеры программирования на языках Delphi, C#

 




Базовые преобразования в GDI+ | Delphi

Пару строк о преобразованиях выводимого изображения средствами GDI+.

Замечу, что данная библиотека работает по принципу - нарисовал и забыл. Таким образом, для правильного отображения вывода на устройство необходимо в обработчике OnPaint создавать и уничтожать объект Graphics.

procedure TForm.PaintBox_Paint(Sender: TObject);
var gpcanvas: TGPGraphics;
begin
 gpcanvas := TGPGraphics.Create(PaintBox.Canvas.Handle);
 : вывод данных :
 gpcanvas.Free;
end;



Простейшие преобразования можно производить, работая прямо с Graphics. Для этого существует ряд методов:

  1. gpcanvas.RotateTransform(angle, [MatrixOrder]) - вращение на угол angle. Угол может быть положительным и отрицательным. Опциональный параметр MatrixOrder в методах преобразования указывает порядок применения преобразования в идущих подряд методах. Может принимать значения MatrixOrderPrepend(по умолчанию) и MatrixOrderAppend.
  2. gpcanvas.ScaleTransform(zoom_x, zoom_y, [MatrixOrder]) - масштабирование вывода по осям X и Y соответственно. Применяя отрицательные значения параметров, получим интересный эффект зеркального отражения соответственно по горизонтали или вертикали.
  3. gpcanvas.TranslateTransform(shift_x, shift_y, [MatrixOrder]) - просто сдвиг вывода по соответствующим осям.


Замечу, что последовательные вызовы преобразований суммируются. То есть:
gpcanvas.RotateTransform(50);
gpcanvas.RotateTransform(-5);
// поворот на 45 градусов



Пример:
img := TGPImage.Create('cat.bmp');

procedure TForm.PaintBox_Paint(Sender: TObject);
var 
 gpcanvas: TGPGraphics;
 font_family: TGPFontFamily;
 font: TGPFont;
 brush: TGPSolidBrush;
begin
 gpcanvas := TGPGraphics.Create(PaintBox.Canvas.Handle);
 gpcanvas.RotateTransform(48); // поворот
 gpcanvas.TranslateTransform(150, 400, MatrixOrderPrepend); // сдвиг
 gpcanvas.ScaleTransform(zoom, zoom, MatrixOrderPrepend); // масштабирование
 gpcanvas.DrawImage(img, 0, 0); // рисуем изображение
 font_family := TGPFontFamily.Create('Arial'); // определяем шрифт
 font := TGPFont.Create(font_family, 12, FontStyleStrikeout, UnitPixel);
 brush := TGPSolidBrush.Create(MakeColor(255, 255, 0, 255));
 gpcanvas.DrawString('Cats-cry.info', -1, font, MakePoint(2, 0.0), brush); // выводим строку с преобразованием
 gpcanvas.ResetTransform; // отменяем преобразования
 gpcanvas.DrawString('Cats-cry.info', -1, font, MakePoint(2, 0.0), brush); // выводим строку
 gpcanvas.Free; 
 end;



преобразования GDI+