virus_forever Опубликовано 29 сентября, 2016 Поделиться Опубликовано 29 сентября, 2016 Всем привет! Как правильно рисовать в физическом разрешении экрана устройства? 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 Камышев Александр Опубликовано 30 сентября, 2016 Поделиться Опубликовано 30 сентября, 2016 (изменено) привет, вот здесь http://fire-monkey.ru/topic/1927-сглаживание-при-рисовании-в-буфер-bitmap/?do=findComment&comment=10081 я рисовал в буфер Bitmap и на OnPaint копировал на канву PaintBox с помощью Canvas->DrawBitmap. Все рисовалось и копировалось быстро без морганий, но так и не получилось сглаживать линии. В конце концов стал рисовать напрямую в канву PaintBox - заработало сглаживание, никаких тормозов и морганий. Основные требования: рисовать только в OnPaint, между BeginScene() и EndScene() и каждый раз полностью инициализировать все настройки канвы: Stroke, Kind, Dash Color и т.п. Изменено 30 сентября, 2016 пользователем Камышев Александр Цитата Ссылка на комментарий
Вопрос
virus_forever
Всем привет!
Как правильно рисовать в физическом разрешении экрана устройства?
На PC - разумеется все корректно.
На Android - (физическое 1920х1080, масштаб 3, логическое 640х360) - рисует в логических координатах. Еле-еле помещается квадрат 300х300 пикселей.
Может как то по-другому необходимо выводит созданный битмап?
Заранее спасибо!
Ссылка на комментарий
1 ответ на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.