Android Question XUI - B4XCanvas

LucaMs

Expert
Licensed User
Longtime User
It is set internally.

Are you sure? Is it set correctly?

upload_2018-3-4_10-37-32.png


On the left, the standard canvas, with anti aliasing.
On the right, XUICanvas (code snippet mentioned in the first post).
 
Upvote 0

LucaMs

Expert
Licensed User
Longtime User
It probably happens because of the clipping. Try to draw a circle with B4XCanvas.
Yes, it is the clipping. DrawBitmap also has this problem:
upload_2018-3-4_10-56-0.png


Left: standard canvas
Center: the snippet
Right: B4XCanvas DrawCircle
 
Upvote 0

LucaMs

Expert
Licensed User
Longtime User
This is not exactly a problem. You need to understand how anti aliasing works...

The way to solve it in this case is to draw the circle after you remove the clipping.
But the bitmap will be drawn anyway without anti-aliasing... or not?
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
The issue with the bitmap drawing is not related to anti aliasing but rather to the way the bitmap is resized.

This code should provide better results:
B4X:
Sub CreateRoundBitmap (Input As B4XBitmap, Size As Int) As B4XBitmap
   If Input.Width <> Input.Height Then
       'if the image is not square then we crop it to be a square.
       Dim l As Int = Min(Input.Width, Input.Height)
       Input = Input.Crop(Input.Width / 2 - l / 2, Input.Height / 2 - l / 2, l, l)
   End If
   Dim c As B4XCanvas
   Dim xview As B4XView = xui.CreatePanel("")
   xview.SetLayoutAnimated(0, 0, 0, Size, Size)
   c.Initialize(xview)
   Dim path As B4XPath
   path.InitializeOval(c.TargetRect)
   c.ClipPath(path)
   c.DrawBitmap(Input.Resize(Size, Size, False), c.TargetRect)
   c.RemoveClip
   c.DrawCircle(c.TargetRect.CenterX, c.TargetRect.CenterY, c.TargetRect.Width / 2 - 2dip, xui.Color_White, False, 5dip) 'comment this line to remove the border
   c.Invalidate
   Dim res As B4XBitmap = c.CreateBitmap
   c.Release
   Return res
End Sub
 
Upvote 0
Top