Drionn
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору sergionn Цитата: TTextLayout содержит абстрактный метод DoRenderLayout, поэтому pTextLayout.EndUpdate; вызывает ошибку. К несчастью я таки не понял, чем отличается Ваш код от кода в штатной процедуре TCanvas.FillText...., кроме как в способе создании TextLayout. Может кто-то объяснить? почему этот код: procedure TForm1.Button3Click(Sender: TObject); var ARect:TRectF; begin Image1.Bitmap.Create(Round(Image1.Width), Round(Image1.Height)); ARect.Create(10, 40, image1.Bitmap.Canvas.Width,image1.Bitmap.Canvas.Height); image1.Bitmap.Canvas.BeginScene; image1.Bitmap.Canvas.FillText( ARect, 'GFDSA', false, 0.2, [TFillTextFlag.ftRightToLeft], TTextAlign.taTrailing, TTextAlign.taLeading ); image1.Bitmap.Canvas.EndScene; end; Визуальный результат на экране отличается от правильного: {PB: TPaintBox;} procedure TForm1.PBPaint(Sender: TObject; Canvas: TCanvas); var ARect:TRectF; begin ARect.Create(10, 40, Canvas.Width,Canvas.Height); Canvas.BeginScene; Canvas.FillText( ARect, 'GFDSA', false, 0.2, [TFillTextFlag.ftRightToLeft], TTextAlign.taTrailing, TTextAlign.taLeading ); Canvas.EndScene; end; Подозреваю, что дело в опциях фонта, но перепробовал все, как мне кажется, и безрезультатно. deks На самом деле вывод не так уж медлителен. Вполне устраивает скорость вывода просто bitmap целиком разрешения HD. А вот его прорисовка с вычислениями и масштабированием по 1 млн. точек на кривую (редко, но и такое бывает) существенный тормоз. ЗЫ. Если кому интересно, то такой опыт: если перед тем как вывести точку проверить пиксель, в который будет вывод, и если он уже занят, то не выводить. Такая оптимизация, несмотря на дополнительные вычисления, дает прирост скорости в 5 раз (на моих данных). | Всего записей: 11 | Зарегистр. 18-12-2009 | Отправлено: 07:59 25-06-2013 | Исправлено: Drionn, 09:48 25-06-2013 |
|