Resizing an image in the paint event of a control is not optimal, especially if it's a large image. Modern versions of the macOS will cache that resized version, but you have zero control over it and it can lead to some funky issues. Also if drawing takes too long, the macOS will get antsy and log errors; often it also unlocks the context prematurely leading to weird graphic issues. Which is absolutely horrific considering Apple love using lazy loading, and refuse to load the actual image data until it's drawn. This inconsistency kind of crap drives me nuts.
In an ideal situation you already know what the maximum size variation is, so when you open the image, you create a new image at that size and draw your image into that size. This serves two purposes, number 1, it ensures the image is loaded into memory (Lazy loading, get lost) and secondly you now have a image that's guaranteed to be no bigger than your maximum size.
Then you create a variation that's the smallest size you're going to draw; and a bunch of variations in-between.
Once you have your variations, you can then create a new picture from all these variations.
Now when you draw this picture, the OS is going to pick the most appropriate sized image when drawing, giving you the best performance across all platforms. Yes it's more work, but to do things in an optimized way always are.