Замечу, что данная библиотека работает по принципу - нарисовал и забыл. Таким образом, для правильного отображения вывода на устройство необходимо в обработчике OnPaint создавать и уничтожать объект Graphics.
procedure TForm.PaintBox_Paint(Sender: TObject); var gpcanvas: TGPGraphics; begin gpcanvas := TGPGraphics.Create(PaintBox.Canvas.Handle); : вывод данных : gpcanvas.Free; end;
Простейшие преобразования можно производить, работая прямо с Graphics. Для этого существует ряд методов:
- gpcanvas.RotateTransform(angle, [MatrixOrder]) - вращение на угол angle. Угол может быть положительным и отрицательным. Опциональный параметр MatrixOrder в методах преобразования указывает порядок применения преобразования в идущих подряд методах. Может принимать значения MatrixOrderPrepend(по умолчанию) и MatrixOrderAppend.
- gpcanvas.ScaleTransform(zoom_x, zoom_y, [MatrixOrder]) - масштабирование вывода по осям X и Y соответственно. Применяя отрицательные значения параметров, получим интересный эффект зеркального отражения соответственно по горизонтали или вертикали.
- 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+
