Delphi: экспорт / рисование TPaintbox прямо в файл с пользовательским размером изображения

Я подкласс ExtCtrls.TPaintBox с несколькими функциями справки и переопределить Paint метод. Я могу добавить TPaintBox к форме, которая затем действует как мой пользовательский объект paintbox и выводит желаемый результат.

Теперь я хочу нарисовать (записать) содержимое моей коробки для рисования в файл, но с разными размерами; например, внутри пользовательского интерфейса моего приложения ящик для рисования имеет размер 150x600 (ширина х высота), но при рисовании в файл он должен быть больше.

Я хочу иметь возможность повторно использовать мой код для рисования (= TPaintBox.Paint) и виртуально нарисовать an object а затем сохранить этот объект в файл.

Я уже могу экспортировать его, но изменение размера при экспорте делает изображение таким, как если бы вы увеличили его с помощью краски.

1 ответ

Решение

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

Извлеките код внутри вашего OnPaint Обработчик событий в отдельный метод, который выглядит так:

procedure TForm1.DoPaintBoxPaint(Canvas: TCanvas);
begin
  // All painting code goes here. Use Canvas.ClipRect to infer size of canvas.
end;

Затем вызовите этот метод из вашего OnPaint обработчик. Проходить PaintBox1.Canvas в качестве параметра к методу.

В общих чертах это выглядит так:

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  DoPaintBoxPaint(PaintBox1.Canvas);
end;

Наконец, вы можете вызвать метод из метода, который сохраняет изображение в файл. В этом случае я предполагаю, что у вас есть временное растровое изображение, на котором можно нарисовать изображение перед сохранением. Передайте холст этого растрового изображения. Эскиз этого кода будет:

Bitmap := TBitmap.Create;
try
  Bitmap.SetSize(Width, Height);
  DoPaintBoxPaint(Bitmap.Canvas);
  Bitmap.SaveToFile(...);
finally
  Bitmap.Free;
end;
Другие вопросы по тегам