Поиск по сайту

Результаты поиска по тегам 'TCanvas'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Категории и разделы

  • Общие вопросы
    • Анимация
    • Графика
    • Стили
    • Базы данных и REST
    • Компоненты
    • Положение, размеры, выравнивание
    • Работа с текстом
    • Приложение и формы
    • Отладка
    • Развертывание приложений
    • Вопросы по языку Object Pascal и RTL
    • Общая информация о TControl
    • События
    • Прочие вопросы
  • Вопросы по платформам
    • Android
    • iOS
    • OSX
    • Windows
    • Windows Phone
    • Linux
  • Вопросы по использованию RAD Studio
    • Лицензирование
    • Сборка проектов
    • Multi-Device Designer
    • Редактор кода
    • Вопросы
  • Обучение
    • Основная информация
    • Вопросы
    • Отзывы
  • Поиск специалистов по FireMonkey
    • Консультации
    • Ищу подрядчика
  • API интернет сервисов
    • ВКонтакте API
    • Google Maps API
    • Yandex деньги
  • Дополнительные ресурсы по FireMonkey
    • Сторонние компоненты
    • Приложения, написанные с использованием FireMonkey
    • Примеры
    • Руководства
    • Шаблоны
    • Статьи и заметки
    • Информация о версиях RAD Studio
    • Новости
  • Организация работы данного форума
    • Правила форума
    • Нарушения правил форума
    • Предложения об организации форума
    • Проблемы
  • Видеокурсы
    • Основная информация
    • Курсы
    • Предложения и голосования за новые курсы
    • Вопросы

Категории

  • Курсы



Фильтр по количеству...

Найдено 12 результатов

  1. Delphi Seattle, Android 5.0.1 Формирую картинку через ScanLine. На выходе полученный битмап рисуется на полотне TImage, на котором перед этим был нарисован Rect. GlobalBitmap - формированный tbitmap. with ObjectPreviewImage.Bitmap.Canvas do begin BeginScene; Clear(TAlphaColorRec.White); DRect := TRectF.Create(0, 0, GlobalBitmap.Width + 8, GlobalBitmap.Height + 8); DrawRect(DRect, 0, 0, AllCorners, StealthForm.ObjectPreviewImage.AbsoluteOpacity); DRect := TRectF.Create(0, 0, GlobalBitmap.Width, GlobalBitmap.Height); DrawBitmap(GlobalBitmap,DRect, TRectF.Create(2, 2, GlobalBitmap.Width + 2, GlobalBitmap.Height + 2), 1); EndScene; end; Проблема собственно в чем - в андроидной версии слева и внизу рамка "съедается". В Win32 версии все отлично. На прилагаемых скриншотах это четко видно. Документацию читал, гугл гуглил. Что я делаю не так? Или это неизвестные подводные камни андроидного рисования на полотне? P.S. Картинка одинаковая, цвет к определенной области применяется не верно. Походу тоже андроидные приколы. Но с этим я уже разберусь. P.P.S. Уже разобрался с цветом - под андроидом Blue и Red в пикселе надо поменять местами. А насчет канвы - не получается никак. P
  2. *** Небольшой обмен опытом *** Вижу что вопросы о размере текста довольно частые, поделюсь своими наработками. function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF; Функция для расчета размера прямоугольника, занимаемого однострочным текстом. Параметры: Text - Текст Font - Шрифт с которым будет выводиться текст Size - если 0, то Font.Size будет использоваться из Font, иначе из данного параметра Исходный код: uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF; var TextLayout: TTextLayout; begin TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try TextLayout.BeginUpdate; try TextLayout.Text := Text; TextLayout.MaxSize := TPointF.Create(9999, 9999); TextLayout.Font.Assign(Font); if not SameValue(0, Size) then begin TextLayout.Font.Size := Size; end; TextLayout.WordWrap := False; TextLayout.Trimming := TTextTrimming.None; TextLayout.HorizontalAlign := TTextAlign.Leading; TextLayout.VerticalAlign := TTextAlign.Leading; finally TextLayout.EndUpdate; end; Result.Width := TextLayout.Width; Result.Height := TextLayout.Height; finally TextLayout.Free; end; end; function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer; Функция возвращающая максимально возможный размер шрифта, для текста вписанного в заданный прямоугольник. Параметры: Text - Текст Font - Шрифт с которым будет выводиться текст Width, Height - Ширина и высота прямоугольника MaxFontSize - Максимально возможный размер шрифта Исходный код: uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; const cMaxFontSize = 512; function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer; var Size, Max, Min, MaxIterations: Integer; Current: TSizeF; begin Max := Trunc(MaxFontSize); Min := 0; MaxIterations := 20; repeat Size := (Max + Min) div 2; Current := CalcTextSize(Text, Font, Size); if ((Abs(Width - Current.Width) < 1) and (Width >= Current.Width)) and ((Abs(Height - Current.Height) < 1) and (Height >= Current.Height)) then break else if (Width < Current.Width) or (Height < Current.Height) then Max := Size else Min := Size; Dec(MaxIterations); until MaxIterations = 0; Result := Size; end; --- Также данные функции можно найти в этом юните
  3. Исходно пытался нарисовать битмап на канве формы. Затем пытался нарисовать хоть что-нибудь. Все время получаю пустой экран. При этом аналогично ничего не получается и с TImage и с PaintBox. Проект на С++, Embarcadero XE7. Что я делаю не так? SolverMXE7.zip
  4. Здравствуйте. Хочу загнать карту в приложение. Т.е. сделать ПринтСрин нескольких участков, слить их в одно изображение в фотошопе, а потом иметь возможность просматривать на смартфоне под android. Что бы можно было пальцами приблизить, подвигать карту. Какой компонет посоветуете?
  5. Здравствуйте. Подскажите пожалуйста как нарисовать текст на канве внутри контрола так чтобы если начало его координат было за канвой контрола, то за контролом он не рисовался. Поясню на примере: Canvas.FillText(TRectF.Create(0,-10,100,10),'11111',True,1,FillTextFlags,TTextAlign.Leading); Если написать это в методе Paint у контрола, то верхняя половина текста вылезет и нарисуется на форме. Как этого избежать? Пробовал создавать отдельный битмап, рисовать в нем, а потом через DrawBitmap переносить. Результата достигаю, но когда идет частая перерисовка, то подтормаживает сильно, ну и качество картинки что-то размытое получается при такм методе.
  6. Подскажите пожалуйста глупому человеку , как можно загрузив изображение: buf: TBitmap; buf.LoadFromFile('.bmp'); Определить цвет нужного мне пикселя (X,Y), и нарисовать хотя бы линию этого цвета на форме используя обычный: Canvas.DrawLine
  7. Может есть аналог процедуры FloodFill из VCL?
  8. Приветствую! Не понятная ситуация с шириной линии. Рисую горизонтальную линию на канве толщиной толщиной 1 пиксель. Если линия лежит вдоль целых координат, например Y=100 то толщина линии реально получается 2 пикселя. А если координаты дробные, например 50.5 то линия в один пиксель. Вот как это выглядит: Т.е. я так понимаю, что координаты канвы начинаются не с нуля, а с 0.5. Как сделать чтобы отображение целых координат было точно в пиксель?
  9. Как определить, какая канва используется в текущий момент?
  10. Возможно ли рисовать анимацию на других компонентах? Вот например как MediaPlayer (VCL) - в свойстве можно выбрать было разные компоненты для отображения видео. В случае с ФМ - можно рисовать только на специальном компоненте MediaPlayerControl. Это случайность, или теперь не получится рисовать на разных компонентах? Если же возможно - поделитесь техникой, как это сделать.
  11. Пробую нарисовать окружность в заданном регионе на мобильной платформе следующим способом: procedure TForm1.Image14Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Image14.Canvas.Stroke.Color := TAlphaColorRec.Red; PixelRegion := TRectF.Create(TPointF.Create(100, 100), 20, 20); Image14.Canvas.DrawEllipse(PixelRegion, 1); end; В Windows всё отображается, а на мобильных платформах окружность не отображается. Подскажите, с чем может быть связано такое поведение.
  12. Добрый вечер. Помогите с таким вопросом. Пытаюсь сделать эффект "Падающих звезд" для Android. Но не получается даже нарисовать точку на канве. Взял ваш пример с форума: procedure TForm9.Panel1Click(Sender: TObject); var M: TBitmapData; i, j: integer; begin if Panel1.Canvas.Bitmap.Map(TMapAccess.maWrite, M) then try for i := 0 to Panel1.Canvas.Bitmap.Width - 1 do for j := 0 to Panel1.Canvas.Bitmap.Height - 1 do M.SetPixel(i, j, TAlphaColorRec.Red); finally Panel1.Canvas.Bitmap.Unmap(M); end; // Stars1.Stars := not Stars1.Stars; end; Но даже при его запуске получаю ошибку: Если нажать на Break то кидает на функцию function TBitmap.GetCanvasClass: TCanvasClass; begin if not Assigned(FCanvasClass) then FCanvasClass := TCanvasManager.GetDefaultCanvas; Result := FCanvasClass; end; Собственно вопрос: Как нарисовать точку на канве в FMX?