Yeah, these days with the GPU-accelerated drawing and fast CPU's you shouldn't have much problem at all making a relatively fast graphics app.
I say go with OpenGL since DX is Windows only. I think if it were me I would write my own routines accessing pixmaps in main memory to do all the drawing, since that lets you have precice control over what is drawn and can make much larger bitmaps bigger than the screen. Then you can do things like flood fills where you'll need to READ the image. It's not so efficient to read the backbuffer and the backbuffer can only be the size of the screen resolution.
I would write the routines using pointers to access the individual pixels in the pixmap. Writing a paint program usually means writing quite a large number of small-ish specialized routines so it can be quite a bit of coding, but it's a good project. You need to ask yourself what you want it to be able to do in terms of sizes of bitmaps, resolution, color depth/palettes, etc... and also you've got to give consideration to how to do a GUI.
I say go with OpenGL since DX is Windows only. I think if it were me I would write my own routines accessing pixmaps in main memory to do all the drawing, since that lets you have precice control over what is drawn and can make much larger bitmaps bigger than the screen. Then you can do things like flood fills where you'll need to READ the image. It's not so efficient to read the backbuffer and the backbuffer can only be the size of the screen resolution.
I would write the routines using pointers to access the individual pixels in the pixmap. Writing a paint program usually means writing quite a large number of small-ish specialized routines so it can be quite a bit of coding, but it's a good project. You need to ask yourself what you want it to be able to do in terms of sizes of bitmaps, resolution, color depth/palettes, etc... and also you've got to give consideration to how to do a GUI.