Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как рисовать на канве в физическом разрешении экрана?


virus_forever

Вопрос

Всем привет!

Как правильно рисовать в физическом разрешении экрана устройства?

procedure TForm2.btnImageScaledDrawClick(Sender: TObject);
var
  B: TBitmap;
  ScreenSvc: IFMXScreenService;
  ScreenScale: Single;

  procedure FL(x,y,wh: Integer; s: single; c: TAlphaColor);
  begin
   B.Canvas.Fill.Color:= c;
          B.Canvas.Stroke.Kind := TBrushKind.Solid;
          B.Canvas.Stroke.Color := Fill.Color;

          B.Canvas.FillRect(RectF(x, y, x+round(wh * s), y+round(wh * s)), 0, 0, AllCorners, 1);
  end;

  function RGBAtoAlphaColor(r,g,b: Byte; a: Byte = 255): TAlphaColor;
  var
    rec: TAlphaColorRec;
  begin
    rec.R:=r;
    rec.G:=g;
    rec.B:=b;
    rec.A:=a;

    Result:= rec.Color;
  end;
begin
  B:= TBitmap.Create;

  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenSvc)) then
    begin
      ScreenScale:= ScreenSvc.GetScreenScale;

      ScreenSvc:= nil;
    end
  else
    begin
      ScreenScale:= 1;
    end;

  with B do
    begin
      Width:= Round(Image1.Width * ScreenScale);
      Height:= Round(Image1.Height * ScreenScale);

      with Canvas do
        begin
          BeginScene;

          SetMatrix(TMatrix.CreateScaling(1 / Scale, 1 / Scale) * Matrix);

          Clear(RGBAtoAlphaColor(0, 174, 219, 100));

          FL(10,10,300,3,RGBAtoAlphaColor(209,17,65));

          FL(10,10,300,2.5,RGBAtoAlphaColor	(0,177,89));

          FL(10,10,300,2,RGBAtoAlphaColor(243,119,53));

          FL(10,10,300,1.5,RGBAtoAlphaColor(255,196,37));

          FL(10,10,300,1,RGBAtoAlphaColor(73,5,96));

          EndScene;
        end;
    end;

  Image1.Bitmap.Assign(B);

  FreeAndNil(b);
end;

На PC - разумеется все корректно.

На Android - (физическое 1920х1080, масштаб 3, логическое 640х360) - рисует в логических координатах. Еле-еле помещается квадрат 300х300 пикселей.

Может как то по-другому необходимо выводит созданный битмап?

Заранее спасибо!

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

привет, вот здесь http://fire-monkey.ru/topic/1927-сглаживание-при-рисовании-в-буфер-bitmap/?do=findComment&comment=10081

я рисовал в буфер Bitmap и на OnPaint копировал на канву PaintBox с помощью Canvas->DrawBitmap. Все рисовалось и копировалось быстро без морганий, но так и не получилось сглаживать линии.

В конце концов стал рисовать напрямую в канву PaintBox - заработало сглаживание, никаких тормозов и морганий.

Основные требования: рисовать только в OnPaint, между BeginScene() и EndScene() и каждый раз полностью инициализировать все настройки канвы: Stroke, Kind, Dash Color и т.п. 

Изменено пользователем Камышев Александр
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...