I had the same dilemma, except I also knew I would eventually add 3D graphics as well. I wanted it to be portable to anything, and I needed it to render accurately and with proper anti-aliasing (anti-aliased while drawing, not via a filter after the fact). After mulling over all the options, I came to a difficult conclusion: write it myself. This is more work than I'd like, but it allows me to ensure it will run on anything, anywhere. If something new comes out that I want it to run on, I just port to it; I don't have to beg a vendor for it to be ported for me. Performance isn't paramount to my application, so I can put enough abstraction layers in to make the porting process relatively easy. All frameworks seem to put performance as the highest priority, which gets rid of the ease of portability. If your application will render graphics that sit still most of the time, this may be your best option (assuming you know linear algebra if you want vector graphics, and know graphics programming regardless).
This option worked for me.