2014-09-18 6 views
1

У меня есть следующий код в Delphi 7, чтобы нарисовать текст авторского права вдоль изогнутого края DVD. Мы используем старую версию Graphics32.Как визуализировать текст вдоль дуги в изображении?

Мы переходим на Delphi XE5 с последним кодом Graphics32, и этот код больше не компилируется; в частности LoadArcCurve и drawingBuffer.RenderFittedText больше не существуют как методы.

procedure TCDLabel.DrawCopyrightText(const drawingBuffer: TBitmap32Ex); 
var 
    FixedPointArray : TArrayOfFixedPoint; 
    Center : TFixedPoint; 
    vAngle1 : double; 
    vAngle2 : double; 
    radius : integer; 
    CopyrightText : string; 
    textColor : TColor32; 
begin 
    radius := (fImageSize div 2) - 30; 
    UpdateTextTransform(8{2.3}, drawingBuffer); 
    Center.x := GR32.Fixed(fImageSize div 2); 
    Center.y := GR32.Fixed(fImageSize div 2); 
    vAngle1 := DegToRad(-130); 
    textColor := clWhite32; 
    vAngle2 := DegToRad(0); 
    LoadArcCurve(Center, GR32.Fixed(radius), GR32.Fixed(radius), vAngle1, vAngle2, FixedPointArray); 
    CopyrightText := Format('%s %s Dystopia Unlimited. All rights reserved.', [GetCopyrightSymbol, fCopyrightYears]); 
    drawingBuffer.RenderFittedText(CopyrightText, textColor, pdoAntialising or pdoFilling, FixedPointArray); 
    FixedPointArray := NIL; 
end; {DrawCopyrightText} 

У меня есть следующий фрагмент кода в Delphi xe5 с использованием последней версии коды Graphic32 и попытался различные другие подобные методы без успеха.

canvas := TCanvas32.Create(drawingBuffer); // drawingBuffer is a TBitmap32 
try 
    canvas.Brushes.Add(TStrokeBrush); 
    canvas.Brushes[0].Visible := TRUE; 
    (canvas.Brushes[0] as TStrokeBrush).StrokeWidth := 2; 
    (canvas.Brushes[0] as TStrokeBrush).FillColor := clWhite32; 

    canvas.Path.BeginPath; 
    canvas.Path.Arc(Center, -130, 0, radius); 
    canvas.Path.EndPath; 
    TextToPath(drawingBuffer.Font.Handle, canvas.Path, FloatRect(0, 0, fImageSize, fImageSize), CopyrightText); 

Все примеры в новом Graphics32, что я могу найти по всей видимости, рисовать непосредственно на холст управления Delphi в то время как я должен рисовать на TBitmap32.

Как визуализировать текст по дуге изображения/растрового изображения с использованием Delphi XE5 и последней версии Graphics32?

+0

Пожалуйста, не говорите, что «больше не работает». Опишите неудачу. Кроме того, есть демонстрации того, что вы описали на сайте gr32. –

+0

@DavidHeffernan - Отредактировано: «Больше не компилируется». Я не смог найти эти демоверсии. Возможно, есть имя метода или ключевое слово, которое я могу найти, чтобы найти эти демо? –

+0

Сообщает ли компилятор об ошибке? –

ответ

1

Я думаю, что лучший способ реализовать то, что вы описали, - это отличное расширение Ангуса Джонсона для графики32, GR32_Text.

1

Используя указатель на работу Ангуса Джонсона, предоставленную Дэвидом Хеффернаном, следующий код является решением моего вопроса.

Этот код использует блоки: GR32_Lines, GR32_Text, GR32_Misc, а также другие. Он также не защищает память и не выполняет какие-либо другие защитные процессы, требуемые для выпускаемого кода.

procedure DrawCopyrightText(const drawingBuffer: TBitmap32); 
var 
    fixedPointArray : TArrayOfFixedPoint; 
    CopyrightText : string; 
    ttFont : TTrueTypeFont; 
    text32 : TText32; 
    i: integer; 
    polyPolyPts: TArrayOfArrayOfArrayOfFixedPoint; 
begin 
    CopyrightText := Format('%s %s Dystopia Unlimited. All rights reserved.', [GetCopyrightSymbol, fCopyrightYears]); 

    text32 := TText32.Create; 
    ttFont := TTrueTypeFont.Create(COPYRIGHT_FONT_NAME, COPYRIGHT_FONT_SIZE); 
    fixedPointArray := GetArcPoints(FloatRect(30, 30, 2370, 2370), -140, 0); 
    polyPolyPts := text32.GetEx(fixedPointArray, CopyrightText, ttFont, aLeft, aMiddle, true, 2); 
    for i := 0 to high(polyPolyPts) do 
    if length(polyPolyPts[i]) > 0 then 
     SimpleFill(drawingBuffer, polyPolyPts[i], clWhite32, clWhite32); 
end; 

 Смежные вопросы

  • Нет связанных вопросов^_^