I don’t know how you all are doing detection, but this is not a problem for us.
We have a separate process for blob detection that does three things:
(1) Detects changes in the input ( “Hey! There’s a blob over there")
(2) Captures the position of the blob
(3) Captures an IMAGE of the blob (this is the important bit)
We then send this off to an (optional) pattern matcher - the pattern matcher has an extremely short list of objects it compares the blob image against - so we can say “hey, that’s a finger-shaped/sized blob” or “look, a rectangle” - stuff like this. This COULD be used in a fancy paint program. We don’t have this doing much now, but plan on using it for things like “dominos”.
We take the processed touch event (coordinates and optional pattern) and pass it off to a touch processor - this links previous and the current frames together. Each blob is given a touch ID that links it back to previous touches (so we know that finger A is the same finger A as three seconds ago and things like that).
Okay - here’s the cool piece -
The touch event is then passed along to the application - the original IMAGE (the blob) is still in the event and the application can take that blob, colorize it (or not) and paint it directly to the screen. So, if you push hard on the screen, squishing your finger out to make it big, the paint program can take that blob and draw it on the screen, making a BIG smear. Or, if you press lightly, a little smear. Or, if you you a pencil (gasp - not on my table) - it will make a point. Or, if you use a paintbrush, it can make a bent paint-brush-y shape.
It’s up to the application to use the matched pattern or not - if we don’t match a pattern, we still send the touch event through. But having the blob in the event through the entire process is a God send in terms of application processing. The key is to NOT just get points sent to your application, get the blob too.
FWIW - I only really know our system - other libraries may do this too. Your mileage may, of course, vary.