Поиск сообщества
Показаны результаты для тегов 'TCanvas'.
Найдено: 12 результатов
-
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
-
*** Небольшой обмен опытом *** Вижу что вопросы о размере текста довольно частые, поделюсь своими наработками. 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; --- Также данные функции можно найти в этом юните
-
Исходно пытался нарисовать битмап на канве формы. Затем пытался нарисовать хоть что-нибудь. Все время получаю пустой экран. При этом аналогично ничего не получается и с TImage и с PaintBox. Проект на С++, Embarcadero XE7. Что я делаю не так? SolverMXE7.zip
- 20 ответов
-
Здравствуйте. Хочу загнать карту в приложение. Т.е. сделать ПринтСрин нескольких участков, слить их в одно изображение в фотошопе, а потом иметь возможность просматривать на смартфоне под android. Что бы можно было пальцами приблизить, подвигать карту. Какой компонет посоветуете?
- 17 ответов
-
- TBitmap
- DrawBitmap
-
(и ещё 2 )
C тегом:
-
Здравствуйте. Подскажите пожалуйста как нарисовать текст на канве внутри контрола так чтобы если начало его координат было за канвой контрола, то за контролом он не рисовался. Поясню на примере: Canvas.FillText(TRectF.Create(0,-10,100,10),'11111',True,1,FillTextFlags,TTextAlign.Leading); Если написать это в методе Paint у контрола, то верхняя половина текста вылезет и нарисуется на форме. Как этого избежать? Пробовал создавать отдельный битмап, рисовать в нем, а потом через DrawBitmap переносить. Результата достигаю, но когда идет частая перерисовка, то подтормаживает сильно, ну и качество картинки что-то размытое получается при такм методе.
- 3 ответа
-
- ClipChildren
- ClipRect
-
(и ещё 1 )
C тегом:
-
Подскажите пожалуйста глупому человеку , как можно загрузив изображение: buf: TBitmap; buf.LoadFromFile('.bmp'); Определить цвет нужного мне пикселя (X,Y), и нарисовать хотя бы линию этого цвета на форме используя обычный: Canvas.DrawLine
- 2 ответа
-
- TMapAccess
- TCanvas
-
(и ещё 3 )
C тегом:
-
Может есть аналог процедуры FloodFill из VCL?
-
Приветствую! Не понятная ситуация с шириной линии. Рисую горизонтальную линию на канве толщиной толщиной 1 пиксель. Если линия лежит вдоль целых координат, например Y=100 то толщина линии реально получается 2 пикселя. А если координаты дробные, например 50.5 то линия в один пиксель. Вот как это выглядит: Т.е. я так понимаю, что координаты канвы начинаются не с нуля, а с 0.5. Как сделать чтобы отображение целых координат было точно в пиксель?
-
Canvas Как определить, какая канва сейчас используется в FireMonkey?
Brovin Yaroslav опубликовал вопрос в Канва
Как определить, какая канва используется в текущий момент? -
Возможно ли рисовать анимацию на других компонентах? Вот например как MediaPlayer (VCL) - в свойстве можно выбрать было разные компоненты для отображения видео. В случае с ФМ - можно рисовать только на специальном компоненте MediaPlayerControl. Это случайность, или теперь не получится рисовать на разных компонентах? Если же возможно - поделитесь техникой, как это сделать.
- 3 ответа
-
- HitTest
- BringToFront
-
(и ещё 3 )
C тегом:
-
TCanvas Почему на мобильных платформах у меня не рисуется окружность?
97mik опубликовал вопрос в Окружность
Пробую нарисовать окружность в заданном регионе на мобильной платформе следующим способом: 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 всё отображается, а на мобильных платформах окружность не отображается. Подскажите, с чем может быть связано такое поведение.- 1 ответ
-
- DrawEllipse
- Stroke
-
(и ещё 1 )
C тегом:
-
Добрый вечер. Помогите с таким вопросом. Пытаюсь сделать эффект "Падающих звезд" для 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?