As documented here on MSDN the PropertyItem object does not have a public constructor.
What to do then when you want to add a property to an image, using Image.SetPropertyItem(..)
method?
This post suggests you create some bank of all property items you want, hold it memory and clone from it.
A commenter on that blog suggested using reflection: Get the non-public parameter-less constructor and invoke it. Notable downside for this approach is reliance on internal implementation of the object. True. I’ll risk it though.
In my implementation, I added a helper method which simply generates the PropertyItem using System.Activator like so:
public static PropertyItem CreatePropertyItem(int id, int length, short exifType, byte[] buffer) |
Pretty clean and simple. Under the covers, Activator
will use some reflection to create the instance, but would also utilize some caching and speed written by not-me. I like not-me code because it means ** I** don’t have to write it.
Since one of my my upcoming talks at http://socalcodecamp.com is on the subject of reflection, this all falls neatly into place.