I know how to do this for saving (using a little low-level p/invoke trickery to get at the underlying HBITMAP data), but not sure how to do it for loading. Seems to come down to this issue

How does one create a Bitmap object that contains a DIBSECTION internally without using the Bitmap(string) constructor?

Using Bitmap(int,int) creates an object that uses DDBs instead, which the HBITMAP cannot be obtained, and hence is useless.